对于使用selenium和python抓取网站时Webdriverchrome崩溃:未知错误:DevToolsActivePort文件不存在感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于Att
对于使用 selenium 和 python 抓取网站时 Webdriver chrome 崩溃:未知错误:DevToolsActivePort 文件不存在感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于AttributeError: 模块“selenium.webdriver”在 Selenium webdriver 中没有属性“w3c”、Centos 上 Java 中的 Selenium:未知错误:DevToolsActivePort 文件不存在、Chrome 扩展 - 如何使用 manifest v3 访问本地 file:// 解决方法:文件系统 API,Chrome 88-90解决方案 1. 扩展框架,Chrome 91+解决方案 2. 扩展窗口/选项卡,Chrome 91+注意事项、Chrome-org.openqa.selenium.WebDriverException:未知错误:无法在driver.manage()window()maximize();处获得自动化扩展的有用信息。
本文目录一览:- 使用 selenium 和 python 抓取网站时 Webdriver chrome 崩溃:未知错误:DevToolsActivePort 文件不存在
- AttributeError: 模块“selenium.webdriver”在 Selenium webdriver 中没有属性“w3c”
- Centos 上 Java 中的 Selenium:未知错误:DevToolsActivePort 文件不存在
- Chrome 扩展 - 如何使用 manifest v3 访问本地 file:// 解决方法:文件系统 API,Chrome 88-90解决方案 1. 扩展框架,Chrome 91+解决方案 2. 扩展窗口/选项卡,Chrome 91+注意事项
- Chrome-org.openqa.selenium.WebDriverException:未知错误:无法在driver.manage()window()maximize();处获得自动化扩展
使用 selenium 和 python 抓取网站时 Webdriver chrome 崩溃:未知错误:DevToolsActivePort 文件不存在
如何解决使用 selenium 和 python 抓取网站时 Webdriver chrome 崩溃:未知错误:DevToolsActivePort 文件不存在
我正在构建一个基于 Selenium、Beautifulsoup 和 Chrome 网络驱动程序的网络抓取 Python 脚本。代码工作得很好,能够从所需网站的几个页面中抓取数据,但运行一段时间后,它抛出了一个我无法修复的错误:
File "lib.py",line 310,in <module>
shop.scrapProductData(masterdata)
File "lib.py",line 103,in scrapeProductData
Chrome = webdriver.Chrome()
File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py",line 81,in __init__
desired_capabilities=desired_capabilities)
File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",line 157,in __init__
self.start_session(capabilities,browser_profile)
File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",line 252,in start_session
response = self.execute(Command.NEW_SESSION,parameters)
File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",line 321,in execute
self.error_handler.check_response(response)
File "/home/philgun/.local/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.)
我不确定它为什么会随机崩溃。我实现的逻辑是:
- 打开网站,抓取我想从中抓取数据的商店的 URL,然后关闭浏览器。
- 在 for 循环中,我打开每个商店的 URL。
- 对于每个商店,我抓取产品 URL 并在获取 URL 后关闭浏览器
- 再次使用 for 循环,我打开每个产品 URL 并抓取我想要的 HTML 数据,然后关闭浏览器。
- 将其转储到 JSON 文件中。
每次抓取来自每个 URL 的 HTML 数据并将其转换为 beautifulsoup 对象时,我都会确保关闭 Web 驱动程序。任何意见或建议或讨论将不胜感激。我不知道如何在此处重现我的代码,因此,这里是指向我个人 GitHub 中托管的代码的链接:
https://github.com/philgun/coolstuff/blob/master/adena/tokopedia/lib.py
附注: 刚刚添加了第 15-20 行,基于 Soheil Pourbafrani 对此线程的评论:
https://stackoverflow.com/questions/50642308/webdriverexception-unkNown-error-devtoolsactiveport-file-doesnt-exist-while-t
不过我还没有测试过。
非常感谢! 干杯, PG
AttributeError: 模块“selenium.webdriver”在 Selenium webdriver 中没有属性“w3c”
如何解决AttributeError: 模块“selenium.webdriver”在 Selenium webdriver 中没有属性“w3c”
我正在尝试从键盘执行一个操作,我想从键盘按 TAB
键执行一个操作,但它对我来说是这个错误消息
AttributeError: module ''selenium.webdriver'' 没有属性 ''w3c''
这是我的代码
from selenium import webdriver
import unittest
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from Pages.loginPage import LoginPage
class createDevice(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome(executable_path="C:/Users/Admin/PycharmProjects/admin/Drivers/chromedriver.exe")
cls.driver.maximize_window()
driver = cls.driver
driver.get("https://admin-helper-f21c1.web.app/login")
login = LoginPage(driver)
login.enter_email("admin@gmail.com")
login.enter_password("123456")
login.click_login()
cls.driver.implicitly_wait(10)
def test_create_device_03(self):
self.driver.find_element_by_xpath(''//*[@id="sidebar"]/ul/li[2]/a'').click()
time.sleep(2)
self.driver.find_element_by_xpath("//main//div/button[@type=''button'']").click()
self.driver.find_element_by_xpath("//input[@id=''name'']").send_keys(" ")
action = ActionChains(webdriver)
action.send_keys(Keys.TAB)
self.driver.find_element_by_xpath("//div[text()='' Device name is required. '']").is_displayed()
print("''Device name is required.'' displayed")
time.sleep(2)
谁能向我解释一下这是什么意思,我该如何解决这个问题?我已经在搜索它,但我没有找到适合我的答案。请帮我!非常感谢
解决方法
ActionChains()
接受 WebDriver 的实例作为参数。
在这个用例中,WebDriver 实例是 self.driver
,因为您已经通过了 webdriver
Centos 上 Java 中的 Selenium:未知错误:DevToolsActivePort 文件不存在
如何解决Centos 上 Java 中的 Selenium:未知错误:DevToolsActivePort 文件不存在
我的 Selenium 测试在 MacOS 上正常运行,但在 Centos 服务器上部署时失败。 Chrome 和驱动程序是:
Google Chrome 88.0.4324.96
ChromeDriver 88.0.4324.96 (68dba2d8a0b149a1d3afac56fa74648032bcf46b-refs/branch-heads/4324@{#1784})
这是堆栈跟踪:
Exception in thread "main" org.openqa.selenium.WebDriverException: unkNown error: Chrome Failed to start: exited abnormally.
(unkNown error: DevToolsActivePort file doesn''t exist)
(The process started from chrome location /opt/google/chrome is no longer running,so ChromeDriver is assuming that Chrome has crashed.)
Build info: version: ''unkNown'',revision: ''unkNown'',time: ''unkNown''
System info: host: ''gitlab-runner'',ip: ''192.168.0.121'',os.name: ''Linux'',os.arch: ''amd64'',os.version: ''4.14.186-146.268.amzn2.x86_64'',java.version: ''1.8.0_252''
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x55d32ba03199 <unkNown>
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
at java.util.stream.AbstractPipeline.wrapAndcopyInto(AbstractPipeline.java:472)
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)
at com.splendid.SmokeTest.main(SmokeTest.java:26)
我的 pom.xml 依赖项:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.141.59</version>
</dependency>
我尝试过类似问题的答案,但没有任何帮助。我当前启动 chrome 的 Java 代码是:
System.setProperty("webdriver.chrome.driver","/opt/google/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandBox");
options.addArguments("headless");
ChromeDriver driver = new ChromeDriver(options);
我也尝试了所有可能的论点,但没有任何帮助。
Chrome 扩展 - 如何使用 manifest v3 访问本地 file:// 解决方法:文件系统 API,Chrome 88-90解决方案 1. 扩展框架,Chrome 91+解决方案 2. 扩展窗口/选项卡,Chrome 91+注意事项
如何解决Chrome 扩展 - 如何使用 manifest v3 访问本地 file:// 解决方法:文件系统 API,Chrome 88-90解决方案 1. 扩展框架,Chrome 91+解决方案 2. 扩展窗口/选项卡,Chrome 91+注意事项
我有一个 Chrome 扩展程序,它可以(如果您允许访问文件 URL)抓取您在 chrome 中打开的本地 pdf 文件,并将其发送到我们的 API 进行处理。这是通过从后台脚本中获取带有 XMLHttpRequest
到 file:///Users/user/whatever/testfile.pdf
的 pdf 来完成的。
当为 Chrome 扩展程序迁移到 manifest v3 时,后台脚本将成为服务工作者。在 Service Worker 中,只有 fetch
可用,而不是 XMLHttpRequest
。问题是,fetch 只支持 http 和 https,不支持 file:// url。那么,我如何才能实现让 Chrome 扩展程序获取/获取本地文件的相同功能?
编辑:我也尝试过的事情:
按照回答的建议从注入的 iframe 中创建 XMLHttpRequest。 发出请求时会出现错误
net:ERR_UNKNowN_URL_SCHEME
从注入的内容脚本生成 XMLHttpRequest。 这给出了错误
Access to XMLHttpRequest at ''file:///.../testfile1.docx.pdf'' from origin ''null'' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http,data,chrome,chrome-extension,chrome-untrusted,https.
据我从大量研究中了解到,对 file://
的访问通常被阻止,Chrome 扩展程序后台脚本曾经是一个例外。在我看来,内容脚本或操作弹出窗口从未允许这样做。
我的 manifest.json 供参考:
{
"manifest_version": 3,"name": "..","version": "0.1","icons": {
"16": "assets/icon-16x16.png","48": "assets/icon-48x48.png","128": "assets/icon-128x128.png"
},"action": {
"default_title": ".."
},"background": {
"service_worker": "background.js"
},"permissions": [
"webRequest","activeTab","scripting","storage","unlimitedStorage","identity","pageCapture"
],"host_permissions": [
"<all_urls>"
],"web_accessible_resources": [{
"resources": ["iframe.html"],"matches": [],"extension_ids": []
}]
}
以编程方式注入内容脚本(使用 webextension-polyfill
进行 promise 支持)
browser.action.onClicked.addListener(async (tab: Tab) => {
await browser.scripting.executeScript({files: [ "inject.js" ],target: {tabId: tab.id}});
});
解决方法
由于您已经提到的原因,您无法在后台 Service Worker 中执行此操作。还有一个 bug 阻止在正常可见的 chrome-extension://
页面或 iframe 中执行此操作。它已在 Chrome 91 中修复。
解决方法:文件系统 API,Chrome 88-90
ManifestV3 扩展可以使用新的 File System API 来读取文件的内容,例如在通过 web_accessible_resources 公开的 iframe 内。
解决方案 1. 扩展框架,Chrome 91+
使用在带有该 pdf 的选项卡中运行的内容脚本:
-
manifest.json 中的
matches
应该包含<all_urls>
或file://*/*
并且文件访问应该由用户在 chrome://extensions 扩展程序的 UI。或者你可以使用activeTab
权限和 programmatic injection 当用户 单击您的扩展程序的图标或通过上下文菜单调用它。- 内容脚本添加了一个不可见的 iframe,指向 web_accessible_resources 中公开的
iframe.html
文件 iframe.html
加载iframe.js
,它照常使用 XMLHttpRequest。由于 iframe 具有chrome-extension://
URL,因此它的环境 与旧的后台脚本相同,因此您可以执行所有操作 你之前在那里做过。
解决方案 2. 扩展窗口/选项卡,Chrome 91+
另一种解决方案是使用您的任何其他可见页面 扩展程序,如 action
弹出窗口或选项页面或任何其他 chrome-extension:// 属于您的扩展程序的页面,因为它们可以 只需访问 file://
网址 就像您之前在后台脚本中所做的那样。
注意事项
- 应该在
chrome://extensions
页面中为此扩展程序启用文件访问。
Chrome-org.openqa.selenium.WebDriverException:未知错误:无法在driver.manage()window()maximize();处获得自动化扩展
我被Chrome浏览器抛出了一种非常不寻常的错误
当我尝试使用以下代码行最大化chrome时
driver.manage().window().maximize();
我低于错误
org.openqa.selenium.WebDriverException: unknown error: cannot get automation extension
from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html
(Session info: chrome=57.0.2987.110)
(Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Windows NT 6.3.9600 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 10.05 seconds
通过本示例,我做了以下事情
1. Updated Chrome driver to latest i.e 2.28 for my Chrome version
57.0.2987.110 (64-bit)
2. uninstalled and re-installed Chrome
3. did a project build up in Eclipse even created a new workspace
但是没有帮助,所以我用了
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
driver = new ChromeDriver();
它可以正常工作,Chrome驱动程序没有显示任何错误, 但是 每当我执行一段代码(例如填写表格或单击某个按钮)后,一段时间后仍然会抛出上述错误。
我们今天的关于使用 selenium 和 python 抓取网站时 Webdriver chrome 崩溃:未知错误:DevToolsActivePort 文件不存在的分享已经告一段落,感谢您的关注,如果您想了解更多关于AttributeError: 模块“selenium.webdriver”在 Selenium webdriver 中没有属性“w3c”、Centos 上 Java 中的 Selenium:未知错误:DevToolsActivePort 文件不存在、Chrome 扩展 - 如何使用 manifest v3 访问本地 file:// 解决方法:文件系统 API,Chrome 88-90解决方案 1. 扩展框架,Chrome 91+解决方案 2. 扩展窗口/选项卡,Chrome 91+注意事项、Chrome-org.openqa.selenium.WebDriverException:未知错误:无法在driver.manage()window()maximize();处获得自动化扩展的相关信息,请在本站查询。
本文标签: