我试图让Selenium在Chrome中作为现有的浏览器工作,我的代码非常简单,我只是不知道为什么它不能工作。(PS我用的是Mac)
https://www.youtube.com/watch?v=Zrx8FSEo9lk&t=161s&ab_channel=Mukeshotwani
这是我想关注的YouTube视频的链接
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
opt = Options()
opt.add_experimental_option("debuggerAddress","localhost:8989")
driver = webdriver.Chrome(executable_path='/Users/adeelsyed/Downloads/chromedriver_mac64',chrome_options=opt)
url = 'https://monkeytype.com/'
driver.get(url)
print("test")
所以在我运行这段代码之前,我在终端/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=8989
中输入
终端会打开一个chrome标签,但是当我点击运行时什么也没发生,它不会打印出“test”
相反它给出了一个很大的误差
DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(executable_path='/Users/adeelsyed/Downloads/chromedriver_mac64',chrome_options=opt)
/Users/adeelsyed/Desktop/Summer Grind Projects/UpdatedMonkType.py:9: DeprecationWarning: use options instead of chrome_options
driver = webdriver.Chrome(executable_path='/Users/adeelsyed/Downloads/chromedriver_mac64',chrome_options=opt)
Traceback (most recent call last):
File "/Users/adeelsyed/Desktop/Summer Grind Projects/UpdatedMonkType.py", line 9, in <module>
driver = webdriver.Chrome(executable_path='/Users/adeelsyed/Downloads/chromedriver_mac64',chrome_options=opt)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/chrome/webdriver.py", line 84, in __init__
super().__init__(
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/chromium/webdriver.py", line 104, in __init__
super().__init__(
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 286, in __init__
self.start_session(capabilities, browser_profile)
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 378, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 440, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py", line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at localhost:8989
from chrome not reachable
Stacktrace:
0 chromedriver 0x0000000104da78ac chromedriver + 4257964
1 chromedriver 0x0000000104d9ff40 chromedriver + 4226880
2 chromedriver 0x00000001049dc854 chromedriver + 280660
3 chromedriver 0x00000001049cb004 chromedriver + 208900
4 chromedriver 0x0000000104a08550 chromedriver + 460112
5 chromedriver 0x0000000104a017bc chromedriver + 432060
6 chromedriver 0x0000000104a3f3dc chromedriver + 685020
7 chromedriver 0x0000000104a3ec08 chromedriver + 683016
8 chromedriver 0x0000000104a0b98c chromedriver + 473484
9 chromedriver 0x0000000104a0c98c chromedriver + 477580
10 chromedriver 0x0000000104d66900 chromedriver + 3991808
11 chromedriver 0x0000000104d6a354 chromedriver + 4006740
12 chromedriver 0x0000000104d6a940 chromedriver + 4008256
13 chromedriver 0x0000000104d7033c chromedriver + 4031292
14 chromedriver 0x0000000104d6af34 chromedriver + 4009780
15 chromedriver 0x0000000104d43490 chromedriver + 3847312
16 chromedriver 0x0000000104d889f4 chromedriver + 4131316
17 chromedriver 0x0000000104d88b4c chromedriver + 4131660
18 chromedriver 0x0000000104d99230 chromedriver + 4198960
19 libsystem_pthread.dylib 0x000000018196606c _pthread_start + 148
20 libsystem_pthread.dylib 0x0000000181960e2c thread_start + 8
我的代码有什么问题?
无论如何,我尝试使用不同的可执行文件_path ='/Users/adeelsyed/Downloads/chromedriver_mac64\2/chromedriver',因为这是终端吐出来的,但也不起作用,我真的不知道这里出了什么问题。
2条答案
按热度按时间o2rvlv0m1#
一个月前,当我需要在一个浏览器中测试多个应用程序时,我也遇到了同样的问题。每次考试前我都要登录,这很让人恼火。
我花了两天半的时间解决了这个问题。让我与你分享解决方案。
在运行脚本之前,您不需要手动运行任何命令。只需按照以下步骤操作:
第一步,请确保您安装了最新版本的selenium和webdriver-manager,命令如下:
pip install selenium webdriver-manager
。第二步.确保您安装的是最新版本的Chrome。
解决方案:
下面是在Windows机器上测试并正常工作的代码:
现在您可以使用上面的驱动程序示例打开任何URL。
当你运行这个脚本时,它会在你当前的工作目录中创建一个名为“chromeProfile”的文件夹。所有浏览器数据和历史记录都将保存到该文件夹中。您将不需要再次登录并再次登录同一个Web应用程序。
就是这样。
让我知道如果你仍然面临任何问题。
3duebb1j2#
Mac版
正如我们所知,
subprocess
模块使用我们的操作系统终端来执行命令。因此,如果您在Mac上,则由于终端命令的差异,上述代码将无法在您的机器上工作。
您只需要根据您的操作系统更改
subprocess
命令。这行代码的主要目的是使用任何开放的自由端口(9089)在远程调试模式下打开Chrome,以便Selenium可以检测驱动程序并将其与打开的Chrome示例绑定。要转换在Mac上启用远程调试的Chrome启动代码,您可以使用
subprocess.run
函数。下面是修改后的代码:让我解释一下上面的代码:
subprocess.run
代替subprocess.Popen
。这简化了代码,并提供了一种更直接的方法来执行命令。open
”。它与-a
标志结合使用,以指定要打开的应用程序,在本例中为“Google Chrome
”。--args
标志用于指示应将以下参数传递给应用程序。--remote-debugging-port=9089
“和“--user-data-dir=
“+os.getcwd()
+“/chromeProfile
“参数保持不变,在端口9089上启用远程调试,并使用存储在当前工作目录中的“chromeProfile”文件夹中的单独用户配置文件。通过使用这些修改,代码应该可以在Mac上成功启动Chrome并启用远程调试。
注意所有剩余的代码行将与上面的答案相同。