selenium开发中常遇到的几个问题

使用selenium模拟浏览器进行测试或者开发的时候,不免会遇到多种问题。本文将对这些问题进行总结和分析。

问题1:DeprecationWarning: executable_path has been deprecated, please pass in a Service object

意思是:chromedriver执行路径已经被废弃,需要使用service参数的方法。之前版本写执行路径,经常会遇到版本不匹配的问题。需频繁的更新驱动版本。故将其废弃。其对应的代码如下:

from selenium import webdriver  # pip3 install selenium
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager  # pip3 install webdriver_manager
import time

chrome_option = webdriver.ChromeOptions()
# chrome_option.add_argument('--headless')  # 注释掉无头设置
chrome_option.add_argument('--disable-gpu')
chrome_option.add_argument('--no-sandbox')  # root用户需添加该行
chrome_option.add_argument('--local-timezone=Asia/Shanghai') #指定时区
chrome_option.add_argument("start-maximized")
chrome_option.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_option.add_experimental_option('useAutomationExtension', False)
chrome_option.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})  # 不加载图片

service = Service(ChromeDriverManager().install())        #此行是关键
with webdriver.Chrome(service=service, options=chrome_option) as browser:
    browser.get("https://ip.useragentinfo.com")
    time.sleep(60)
    browser.close()

问题2:This version of ChromeDriver only supports Chrome version

出现这问题的原因是:chromedriver驱动与系统中的chrome版本不匹配。这是由于Chrome进行了升级,但是chromedriver还是老版本导致。
解决这个问题的方法有两种:

  1. 根据supports Chrome version 【版本】,下载指定版本的chromedriver,进行替换。chromedriver阿里云镜像下载地址
  2. 程序中的代码应该类似下面的代码。其解决方法可参考问题1的解决方式。使用service来解决这个问题。
webdriver.Chrome("/usr/local/bin/chromedriver", options=chrome_option )

问题3:被检测出使用了selenium

这主要是浏览器有许多的参数selenium没有修改到。这就需要使用其他模块绕过检测。检索后发现:selenium_stealth 模块可以较好的支持。浏览器参数校验

from selenium import webdriver  # pip3 install selenium
from selenium.webdriver.chrome.service import Service
from selenium_stealth import stealth  # pip3 install selenium_stealth         需要安装该模块解决被检测的问题
from webdriver_manager.chrome import ChromeDriverManager  # pip3 install webdriver_manager
import time

chrome_option = webdriver.ChromeOptions()
# chrome_option.add_argument('--headless')  # 16年之后,chrome给出的解决办法,抢了PhantomJS饭碗
chrome_option.add_argument('--disable-gpu')
chrome_option.add_argument('--no-sandbox')  # root用户不加这条会无法运行
chrome_option.add_argument('--local-timezone=Asia/Shanghai')
chrome_option.add_argument("start-maximized")
chrome_option.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_option.add_experimental_option('useAutomationExtension', False)
chrome_option.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})  # 不加载图片,加快访问速度


service = Service(ChromeDriverManager().install())
with webdriver.Chrome(service=service, options=chrome_option) as browser:
    stealth(browser,
            user_agent='Mozilla/5.0 (Linux; Android 10; ELS-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Mobile Safari/537.36',
            languages=["zh-CN", "cn"],
            vendor="Google Inc.",
            platform="Linux armv81",
            webgl_vendor="Intel Inc.",
            renderer="",
            fix_hairline=True,
            )

    browser.get("https://ip.useragentinfo.com")
    time.sleep(60)
    browser.close()

资源链接:

  1. chromedriver阿里云镜像下载地址
  2. chrome渠道官方下载地址
  3. Selenium文档
    4.selenium-stealth
    5.浏览器参数校验
    6.webdriver-manager
end
  • 作者:kali(作者介绍)
  • 更新时间:2022-07-20 18:09
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:转载站点文章,请附上原文链接
  • 翻译声明:翻译文章会不严谨,请务必附上原文链接
  • 扫描阅读:扫描二维码,手机阅读该文章