GVKun编程网logo

Selenium ChromeDriver无法识别新编译的无头铬(Python)(selenium无头模式获取不到元素)

12

在这篇文章中,我们将为您详细介绍SeleniumChromeDriver无法识别新编译的无头铬的内容,并且讨论关于Python的相关问题。此外,我们还会涉及一些关于3-Python爬虫-动态HTML/

在这篇文章中,我们将为您详细介绍Selenium ChromeDriver无法识别新编译的无头铬的内容,并且讨论关于Python的相关问题。此外,我们还会涉及一些关于3-Python爬虫-动态HTML/Selenium+PhantomJS/chrome无头浏览器-chromedriver、centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目、Chrome浏览器通过Pythonselenium自动更新时如何使用特定版本的ChromeDriver、Cron无法通过Python找到selenium的Chromedriver的可执行路径的知识,以帮助您更全面地了解这个主题。

本文目录一览:

Selenium ChromeDriver无法识别新编译的无头铬(Python)(selenium无头模式获取不到元素)

Selenium ChromeDriver无法识别新编译的无头铬(Python)(selenium无头模式获取不到元素)

我试图将新的(2016) 头版Chromium与Selenium /
ChromeDriver一起使用(过去,我将Firefox与xfvb一起使用,但这有望变得更好)。

我根据此处找到的说明从源代码中编译了一个无头版本的Chromium(我没有找到任何预构建的二进制文件),然后使用以下代码通过Selenium启动它:

from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsl_option = Options()l_option.add_argument(''headless'')l_option.add_argument(''disable-notifications'')l_option.binary_location = ''/home/fi11222/Headless_Chromium/headless_shell''l_driver = webdriver.Chrome(chrome_options=l_option)

相同的代码适用于标准铬(如果我删除该binary.location选件)

但是,我得到以下错误:

selenium.common.exceptions.WebDriverException: Message: unknown error: unrecognized Chrome version: HeadlessChrome/59.0.3032.0  (Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.4.0-53-generic x86_64)

显然,无头铬二进制文件使用ChromeDriver无法识别的版本ID进行编译。救命 !!

环境:

  • 编译:Ubuntu 16.04服务器
  • selenium执行:Linux Mint 18.1

答案1

小编典典

chromedriver自此补丁(在发布消息后创建)以来就被Chromedriver识别,该补丁仅在chromedriver
2.29(2017年4月发布)之后可用。确保您在PATH中具有此chromedriver可执行文件,并且Selenium正在选择它,而不是您可能具有的任何其他chromedriver。

另外,请注意-
根据无头的Chrome文档
-您还需要传递两个标志:

l_option.add_argument(''remote-debugging-port=9222'')l_option.add_argument(''disable-gpu'')

至于无头Chrome的预构建二进制文件-该选项自Chrome 57起可用,因此当前通过官方Google存储库发布的所有版本(即稳定的Chrome
58和不稳定的Chrome 59)都支持该选项。它是Chrome
59的亮点,因此可以期待一些粗糙的边缘,直到功能稳定为止。

3-Python爬虫-动态HTML/Selenium+PhantomJS/chrome无头浏览器-chromedriver

3-Python爬虫-动态HTML/Selenium+PhantomJS/chrome无头浏览器-chromedriver

动态HTML

爬虫跟反爬虫

动态HTML介绍

  • JavaScrapt
  • jQuery
  • Ajax
  • DHTML
  • Python采集动态数据
    • 从Javascript代码入手采集
    • Python第三方库运行JavaScript,直接采集你在浏览器看到的页面

Selenium + PhantomJS

  • Selenium: web自动化测试工具
    • 自动加载页面
    • 获取数据
    • 截屏
    • 安装: pip install selenium==2.48.0
    • 官网: http://selenium-python.readthedocs.io/index.html
  • PhantomJS(幽灵)
    • 基于Webkit 的无界面的浏览器
    • 官网: http://phantomjs.org/download.html
  • Selenium 库有有一个WebDriver的API
  • WebDriver可以跟页面上的元素进行各种交互,用它可以来进行爬取
  • 案例 v36
  • chrome + chromedriver
    • 下载安装chrome: 下载+安装
    • 下载安装chromedriver:
  • Selenium操作主要分两大类:
    • 得到UI元素
      • find_element_by_id
      • find_elements_by_name
      • find_elements_by_xpath
      • find_elements_by_link_text
      • find_elements_by_partial_link_text
      • find_elements_by_tag_name
      • find_elements_by_class_name
      • find_elements_by_css_selector
    • 基于UI元素操作的模拟
      • 单击
      • 右键
      • 拖拽
      • 输入
      • 可以通过导入ActionsChains类来做到
    • 案例37

案例v36

''''''
通过webdriver操作进行查找1
''''''



from selenium import webdriver
import time




# 通过Keys模拟键盘
from selenium.webdriver.common.keys import  Keys

# 操作哪个浏览器就对哪个浏览器建一个实例
# 自动按照环境变量查找相应的浏览器
driver = webdriver.PhantomJS()

# 如果浏览器没有在相应环境变量中,需要指定浏览器位置


driver.get("http://www.baidu.com")


# 通过函数查找title标签
print("Title: {0}".format(driver.title))

案例v37

from selenium import webdriver
import time
from selenium.webdriver.common.keys import  Keys

# 可能需要手动添加路径
driver = webdriver.Chrome()

url = "http://www.baidu.com"


driver.get(url)


text = driver.find_element_by_id(''wrapper'').text
print(text)
print(driver.title)
# 得到页面的快照
driver.save_screenshot(''index.png'')

# id="kw" 的是百度的输入框,我们得到输入框的ui元素后直接输入“大熊猫"
driver.find_element_by_id(''kw'').send_keys(u"大熊猫")

# id="su"是百度搜索的按钮,click模拟点击
driver.find_element_by_id(''su'').click()

time.sleep(5)
driver.save_screenshot("daxiongmao.png")


#获取当前页面的cookie
print(driver.get_cookies())

# 模拟输入两个按键 ctrl+ a
driver.find_element_by_id(''kw'').send_keys(Keys.CONTROL, ''a'')
#ctr+x 是剪切快捷键
driver.find_element_by_id(''kw'').send_keys(Keys.CONTROL, ''x'')

driver.find_element_by_id(''kw'').send_keys(u''航空母舰'')
driver.save_screenshot(''hangmu.png'')

driver.find_element_by_id(''su'').send_keys(Keys.RETURN)

time.sleep(5)
driver.save_screenshot(''hangmu2.png'')


# 清空输入框 , clear
driver.find_element_by_id(''kw'').clear()
driver.save_screenshot(''clear.png'')

# 关闭浏览器
driver.quit()

selenium自动化测试 工具:

-用selenium登录的时候,先要get到页面; -get到页面之后就可以准备输入了, -selenium可以模拟输入; -selenium调没有界面的chrome或者PhantomJS -保存快照,手动输入,对静态验证码的一大杀手。

centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目

centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目

 centos7.4 实例

 

利用 yum 命令安装 google-chrome 超级简单(安装最新版):

yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

 

chromedriver 也下载最新版就好,和Mac 版本一样,我依旧选择这个最新版本:

http://chromedriver.storage.googleapis.com/index.html?path=70.0.3538.16/

Python3.7 之前安装过:

Centos7 环境下 Python2.7 换成 Python3.7 运行 scrapy 应用所遇到的问题记录

 

然后配置一下,就能跑起来 selenium 项目了,当然该 pip install xxx 安装模块就缺什么安装什么了

# 设置 webdriver 参数
        options = webdriver.ChromeOptions()
        # 设置谷歌浏览器的一些选项
        #  proxy 代理 options 选项
        options.add_argument(r''--proxy--server=http:\\'' + ip)
        uas = get_uas()
        # 设置user-agent
        options.add_argument(''user-agent='' + choice(uas))
        # 以 headless 方案运行
        options.add_argument(''--headless'')
        options.add_argument(''--no-sandbox'')
        # options.add_argument(''--disable-dev-shm-usage'')
        # 禁用图片访问
        # prefs = {"profile.managed_default_content_settings.images": 2}
        # options.add_experimental_option("prefs", prefs)

 如果不配置  # 以 headless 方案运行

会抛出下面异常

[root@iZwz9117d4ssv2v5oe81m3Z selenium_baidu]# python testRun.py
package_util 初始化
testRun.py:32: DeprecationWarning: use options instead of chrome_options
  driver = webdriver.Chrome(path, chrome_options=options)
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/python/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/usr/python/lib/python3.7/threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "testRun.py", line 32, in get_url
    driver = webdriver.Chrome(path, chrome_options=options)
  File "/usr/python/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/python/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/python/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/python/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/python/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn''t exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=70.0.3538.16 (16ed95b41bb05e565b11fb66ac33c660b721f778),platform=Linux 3.10.0-693.2.2.el7.x86_64 x86_64)
 

 

selenium 代码正确运行:

 

 

Chrome浏览器通过Pythonselenium自动更新时如何使用特定版本的ChromeDriver

Chrome浏览器通过Pythonselenium自动更新时如何使用特定版本的ChromeDriver

我是Selenium的新手,现在可以将selenium与Chromedriver一起使用以进行基本的自动测试,代码可以正常工作,但问题是Chrome浏览器始终在后端自动更新,并且代码始终在Chrome更新后无法运行。我知道我需要下载新的chromedriver来解决此问题,但是我想知道是否有任何方法可以在不禁用chromebrowser更新的情况下解决此问题?tks。

我正在使用Windows 10 / Chrome版本67 / Python 3.6.4 / Selenium 3.12.0

答案1

小编典典

,除了更新 ChromeDriver 二进制版本外,没有其他选择,而 Chrome浏览器 会不断自动更新。


原因

在添加,修改和删除现有功能后,会释放每个 Chrome浏览器 。为了符合当前的 浏览器功能 集, Chrome团队 会不时发布兼容的
ChromeDriver 二进制文件。这些 ChromeDriver 二进制文件能够与 Chrome浏览器 进行交互。某些版本的
ChromeDriver 二进制文件支持特定范围的 Chrome浏览器 版本(某些是最新版本),如下所示:

  • ChromeDriver v 84.0.4147.30 (2020-05-28)

    Supports Chrome version 84
  • ChromeDriver v 83.0.4103.39 (2020-05-05)

    Supports Chrome version 83
  • ChromeDriver v 82故意 跳过。

  • ChromeDriver v 81.0.4044.138 (2020-05-05)

    Supports Chrome version 81
  • ChromeDriver v 80.0.3987.106 (2020-02-13)

    Supports Chrome version 80
  • ChromeDriver v 79.0.3945.36 (2019-11-18)

    Supports Chrome version 79
  • ChromeDriver v 78.0.3904.70 (2019-10-21)

    Supports Chrome version 78
  • ChromeDriver v 77.0.3865.40 (2019-08-20)

    Supports Chrome version 77
  • ChromeDriver v 76.0.3809.126 (2019-08-20)

    Supports Chrome version 76
  • ChromeDriver v 75.0.3770.8 (2019-04-29)

    Supports Chrome version 75
  • ChromeDriver v 74.0.3729.6 (2019-03-14)

    Supports Chrome version 74
  • ChromeDriver v 73.0.3683.68 (2019-03-06)

    Supports Chrome version 73
  • ChromeDriver v 2.46 (2019-02-01)

    Supports Chrome v71-73
  • ChromeDriver v 2.45 (2018-12-10)

    Supports Chrome v70-72
  • ChromeDriver v 2.44 (2018-11-19)

    Supports Chrome v69-71
  • ChromeDriver v 2.43 (2018-10-16)

    Supports Chrome v69-71
  • ChromeDriver v 2.42 (2018-09-13)

    Supports Chrome v68-70
  • ChromeDriver v 2.41 (2018-07-27)

    Supports Chrome v67-69
  • ChromeDriver v 2.40 (2018-06-07 )

    Supports Chrome v66-68
  • ChromeDriver v 2.39 (2018-05-30)

    Supports Chrome v66-68
  • ChromeDriver v 2.38 (2018-04-17 )

    Supports Chrome v65-67
  • ChromeDriver v 2.37 (2018-03-16 )

    Supports Chrome v64-66
  • ChromeDriver v 2.36 (2018-03-02 )

    Supports Chrome v63-65
  • ChromeDriver v 2.35 (2018-01-10 )

    Supports Chrome v62-64
  • ChromeDriver v 2.34 (2017-12-10 )

    Supports Chrome v61-63
  • ChromeDriver v 2.33 (2017-10-03)

    Supports Chrome v60-62
  • ChromeDriver v 2.32 (2017-08-30)

    Supports Chrome v59-61
  • ChromeDriver v 2.31 (2017-07-21)

    Supports Chrome v58-60
  • ChromeDriver v 2.30 (2017-06-07)

    Supports Chrome v58-60
  • ChromeDriver v 2.29 (2017-04-04)

    Supports Chrome v56-58

结论

要使脚本/程序与更新的 Chrome浏览器 保持交互,您必须根据 兼容性将ChromeDriver 二进制版本与 Chrome浏览器 保持同步。

Cron无法通过Python找到selenium的Chromedriver的可执行路径

Cron无法通过Python找到selenium的Chromedriver的可执行路径

如何解决Cron无法通过Python找到selenium的Chromedriver的可执行路径?

在 Spyder 中一切正常。我想在特定时间运行 Python 脚本,所以我使用了 crontab。我的编码是

SHELL=/bin/zsh
PATH=/usr/local/bin/:/usr/bin:/usr/sbin

46 01 * * * /Users/myusername/opt/anaconda3/bin/python /Users/myusername/Documents/Lynn\''s\ Python\ work/shopee/shopee_main.py >>/Users/myusername/Desktop/out.log

在我的 Python 中编写关于 Chromedriver 的代码是

options = webdriver.ChromeOptions()
options.add_argument(''--headless'')
browser = webdriver.Chrome(chrome_options=options,executable_path=os.getcwd()+''/chromedriver'')

我不熟悉 crontab 和 Linux,我一直在寻找大量信息,就是无法解决。请帮帮我? 感谢每一个帮助?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于Selenium ChromeDriver无法识别新编译的无头铬Python的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于3-Python爬虫-动态HTML/Selenium+PhantomJS/chrome无头浏览器-chromedriver、centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目、Chrome浏览器通过Pythonselenium自动更新时如何使用特定版本的ChromeDriver、Cron无法通过Python找到selenium的Chromedriver的可执行路径的相关知识,请在本站寻找。

本文标签: