GVKun编程网logo

使用 selenium 和 python 抓取网站时 Webdriver chrome 崩溃:未知错误:DevToolsActivePort 文件不存在

1

对于使用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 文件不存在

使用 selenium 和 python 抓取网站时 Webdriver chrome 崩溃:未知错误:DevToolsActivePort 文件不存在

如何解决使用 selenium 和 python 抓取网站时 Webdriver chrome 崩溃:未知错误:DevToolsActivePort 文件不存在

我正在构建一个基于 Selenium、Beautifulsoup 和 Chrome 网络驱动程序的网络抓取 Python 脚本。代码工作得很好,能够从所需网站的几个页面中抓取数据,但运行一段时间后,它抛出了一个我无法修复的错误:

  1. File "lib.py",line 310,in <module>
  2. shop.scrapProductData(masterdata)
  3. File "lib.py",line 103,in scrapeProductData
  4. Chrome = webdriver.Chrome()
  5. File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py",line 81,in __init__
  6. desired_capabilities=desired_capabilities)
  7. File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",line 157,in __init__
  8. self.start_session(capabilities,browser_profile)
  9. File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",line 252,in start_session
  10. response = self.execute(Command.NEW_SESSION,parameters)
  11. File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py",line 321,in execute
  12. self.error_handler.check_response(response)
  13. File "/home/philgun/.local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py",line 242,in check_response
  14. raise exception_class(message,screen,stacktrace)
  15. selenium.common.exceptions.WebDriverException: Message: unkNown error: Chrome Failed to start: exited abnormally.
  16. (unkNown error: DevToolsActivePort file doesn''t exist)
  17. (The process started from chrome location /usr/bin/google-chrome is no longer running,so ChromeDriver is assuming that Chrome has crashed.)

我不确定它为什么会随机崩溃。我实现的逻辑是:

  1. 打开网站,抓取我想从中抓取数据的商店的 URL,然后关闭浏览器。
  2. 在 for 循环中,我打开每个商店的 URL。
  3. 对于每个商店,我抓取产品 URL 并在获取 URL 后关闭浏览器
  4. 再次使用 for 循环,我打开每个产品 URL 并抓取我想要的 HTML 数据,然后关闭浏览器。
  5. 将其转储到 JSON 文件中。

每次抓取来自每个 URL 的 HTML 数据并将其转换为 beautifulsoup 对象时,我都会确保关闭 Web 驱动程序。任何意见或建议或讨论将不胜感激。我不知道如何在此处重现我的代码,因此,这里是指向我个人 GitHub 中托管的代码的链接:

  1. https://github.com/philgun/coolstuff/blob/master/adena/tokopedia/lib.py

附注: 刚刚添加了第 15-20 行,基于 Soheil Pourbafrani 对此线程的评论:

  1. 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”

如何解决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 文件不存在

如何解决Centos 上 Java 中的 Selenium:未知错误:DevToolsActivePort 文件不存在

我的 Selenium 测试在 MacOS 上正常运行,但在 Centos 服务器上部署时失败。 Chrome 和驱动程序是:

  1. Google Chrome 88.0.4324.96
  2. ChromeDriver 88.0.4324.96 (68dba2d8a0b149a1d3afac56fa74648032bcf46b-refs/branch-heads/4324@{#1784})

这是堆栈跟踪:

  1. Exception in thread "main" org.openqa.selenium.WebDriverException: unkNown error: Chrome Failed to start: exited abnormally.
  2. (unkNown error: DevToolsActivePort file doesn''t exist)
  3. (The process started from chrome location /opt/google/chrome is no longer running,so ChromeDriver is assuming that Chrome has crashed.)
  4. Build info: version: ''unkNown'',revision: ''unkNown'',time: ''unkNown''
  5. 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''
  6. Driver info: driver.version: ChromeDriver
  7. remote stacktrace: #0 0x55d32ba03199 <unkNown>
  8. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  9. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  10. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  11. at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  12. at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
  13. at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
  14. at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
  15. at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
  16. at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
  17. at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
  18. at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
  19. at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
  20. at java.util.stream.AbstractPipeline.wrapAndcopyInto(AbstractPipeline.java:472)
  21. at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
  22. at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
  23. at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
  24. at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
  25. at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
  26. at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
  27. at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
  28. at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
  29. at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
  30. at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
  31. at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
  32. at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
  33. at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)
  34. at com.splendid.SmokeTest.main(SmokeTest.java:26)

我的 pom.xml 依赖项:

  1. <dependency>
  2. <groupId>org.seleniumhq.selenium</groupId>
  3. <artifactId>selenium-api</artifactId>
  4. <version>3.141.59</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.seleniumhq.selenium</groupId>
  8. <artifactId>selenium-java</artifactId>
  9. <version>3.141.59</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.seleniumhq.selenium</groupId>
  13. <artifactId>selenium-chrome-driver</artifactId>
  14. <version>3.141.59</version>
  15. </dependency>

我尝试过类似问题的答案,但没有任何帮助。我当前启动 chrome 的 Java 代码是:

  1. System.setProperty("webdriver.chrome.driver","/opt/google/chromedriver");
  2. ChromeOptions options = new ChromeOptions();
  3. options.addArguments("--no-sandBox");
  4. options.addArguments("headless");
  5. 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 扩展 - 如何使用 manifest v3 访问本地 file:// 解决方法:文件系统 API,Chrome 88-90解决方案 1. 扩展框架,Chrome 91+解决方案 2. 扩展窗口/选项卡,Chrome 91+注意事项

我有一个 Chrome 扩展程序,它可以(如果您允许访问文件 URL)抓取您在 chrome 中打开的本地 pdf 文件,并将其发送到我们的 API 进行处理。这是通过从后台脚本中获取带有 XMLHttpRequestfile:///Users/user/whatever/testfile.pdf 的 pdf 来完成的。

当为 Chrome 扩展程序迁移到 manifest v3 时,后台脚本将成为服务工作者。在 Service Worker 中,只有 fetch 可用,而不是 XMLHttpRequest。问题是,fetch 只支持 http 和 https,不支持 file:// url。那么,我如何才能实现让 Chrome 扩展程序获取/获取本地文件的相同功能?

编辑:我也尝试过的事情:

  1. 按照回答的建议从注入的 iframe 中创建 XMLHttpRequest。 发出请求时会出现错误 net:ERR_UNKNowN_URL_SCHEME

  2. 从注入的内容脚本生成 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 中的
  1. matches 应该包含 <all_urls>file://*/* 并且文件访问应该由用户在 chrome://extensions 扩展程序的 UI。或者你可以使用 activeTab 权限和 programmatic injection 当用户 单击您的扩展程序的图标或通过上下文菜单调用它。
  2. 内容脚本添加了一个不可见的 iframe,指向 web_accessible_resources 中公开的 iframe.html 文件
  3. 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-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();处获得自动化扩展的相关信息,请在本站查询。

本文标签: