我正在尝试编写一个脚本,它将我的数据从一个站点同步到另一个站点。第一个站点没有公共 api。但我知道这些查询,它可以为我提供我需要的所有数据的 json 响应。我决定使用selenium。主要问题是我必须获得授权才能获取这些数据,但是使用 selenium 授权太难了,因为站点使用 recaptcha2。我也想在我的服务器上使用它。所以我也使用pyvirtualdisplay
我在我的 Firefox 中创建了一个新的配置文件,然后我在第一个具有该配置文件的站点上获得了授权,并在脚本中使用了它。像这样的东西
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
profile = webdriver.FirefoxProfile('/home/admin/.cache/mozilla/firefox/o0eaxyux.user')
browser = webdriver.Firefox(profile, executable_path=r'./geckodriver')
browser.get("https://example.com/p/api/v5/profile/blabla")
response = json.loads(browser.find_element_by_tag_name('body').text)
print(response)
browser.quit()
display.stop()
它在我的电脑上完美运行。在服务器上,如果我不使用配置文件, pyvirtualdisplay也可以工作。但是,如果我在服务器上使用配置文件,则会收到错误消息:
Traceback (most recent call last):
File "1.py", line 7, in <module>
browser = webdriver.Firefox(profile, executable_path=r'./geckodriver')
File "/home/admin/.local/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
keep_alive=True)
File "/home/admin/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/home/admin/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/home/admin/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/admin/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: connection refused
geckodriver.log 只有一个字符串:
1575543823086 mozrunner::runner INFO Running command: "/usr/bin/firefox" "-marionette" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofilegsEa0V"
有任何想法吗?