在这篇文章中,我们将为您详细介绍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无头模式获取不到元素)
- 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无头模式获取不到元素)
我试图将新的(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
动态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
- 得到UI元素
案例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 实例
利用 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
我是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的可执行路径?
在 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的可执行路径的相关知识,请在本站寻找。
本文标签: