Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,今天在针对js动态网页爬虫时,使用代理并使用Selenium,打开网页时,浏览器总是一闪而退,代码如下:

from selenium import webdriver
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
def chrome_proxy():
    driver_path = Service(r'C:\Python39\chromedriver.exe')
    chromeoptions = webdriver.ChromeOptions()
    # 设置代理
    chromeoptions.add_argument("--proxy-server=http://223.242.228.140:42662")
    browser = webdriver.Chrome(service=driver_path,options=chromeoptions)
    # response = browser.get("http://myip.ipip.net")
    browser.get("https://www.baidu.com/")
    print("返回页面", browser.page_source)
if __name__ == '__main__':
    chrome_proxy()

然后以为是下载的浏览器驱动版本不同导致。所以我第一步先排查我的浏览器版本,

如图1:(版本为102.0.5005.63)

浏览器驱动版本我下载的是102.0.5005.61并放到了python的安装目录下(不能用103.0.5060.24会报错版本不匹配):

(下载地址:http://chromedriver.storage.googleapis.com/index.html

 

但是版本已经相同了,浏览器还是一闪而退,并且也没有报错驱动版本的错误,但是无意中把driver_path = Service(r'C:\Python39\chromedriver.exe')定义在函数外面确成功了,没有出现闪退,此时恍然大悟,是由于浏览器不是全局变量导致。

from selenium import webdriver

from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
driver_path = Service(r'C:\Python39\chromedriver.exe')
def chrome_proxy():
    chromeoptions = webdriver.ChromeOptions()
    # 设置代理
    chromeoptions.add_argument("--proxy-server=http://223.242.228.140:42662")
    browser = webdriver.Chrome(service=driver_path,options=chromeoptions)
    # response = browser.get("http://myip.ipip.net")
    browser.get("https://www.baidu.com/")
    print("返回页面", browser.page_source)

因此也可以改写成global browser定义成全局变量:
from selenium import webdriver
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
def chrome_proxy():
    # 需要设置browser为全局变量才可以,否则会闪退
    global browser
    driver_path = Service(r'C:\Python39\chromedriver.exe')
    chromeoptions = webdriver.ChromeOptions()
    # 设置代理
    chromeoptions.add_argument("--proxy-server=http://223.242.228.140:42662")
    browser = webdriver.Chrome(service=driver_path,options=chromeoptions)
    # response = browser.get("http://myip.ipip.net")
    browser.get("https://www.baidu.com/")
    print("返回页面", browser.page_source)
if __name__ == '__main__':
    chrome_proxy()

我用的代理是:https://h.shenlongip.com/index?from=seller&did=h4Dmox

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐