1

我在一个抓取项目中,当然我正在尝试获取一个页面。

这是我用来打开页面的代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("user-data-dir=selenium")
print("Opening browser")
driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver", options=chrome_options)
print("getting request")
driver.get("http://www.tsetmc.com/Loader.aspx?ParTree=15131F")
print("starting wait")
time.sleep(10)
response = driver.page_source
print("got response, quitting...")
driver.quit()

我的问题

问题是当它到达时它什么也不做,driver.get()我的意思是它既不结束进程也不打印"starting wait"。(问题在我的笔记本电脑和服务器上仍然存在)我尝试删除该--headless选项,它在我的笔记本电脑(Ubuntu 20.04)上运行良好,但是当我将它上传到我的服务器并在那里运行时(Ubuntu Server 18.04)它镀铬崩溃(下面的异常消息)

消息:未知错误:Chrome 无法启动:异常退出。(未知错误:DevToolsActivePort 文件不存在)(从 chrome 位置 /usr/bin/google-chrome 启动的进程不再运行,因此 ChromeDriver 假设 Chrome 已崩溃。)

所以我得出的结论是我必须使用--headless选项,因为我的服务器上没有 GUI,并且当它不存在时 chrome 崩溃。

总之,我需要帮助来解决无限等待的问题driver.get()

PS:我可以毫无问题地运行下面的代码,这对我来说很奇怪:

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("user-data-dir=selenium")
browser = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=chrome_options)
print("open browser")
browser.get("https://www.codal.ir")
print("get")
time.sleep(10)
response = browser.page_source
print("response")
browser.quit()
4

1 回答 1

0

假设您已经创建了一个名为selenium的Chrome 配置文件,您需要在参数之前添加并传递Chrome 配置文件目录的绝对路径,如下所示:--user-data-dir

chrome_options.add_argument("--user-data-dir=/path/to/chromium-profile/selenium")

作为替代方案,您还可以使用以下参数--profile-directory

options.add_argument('--profile-directory=selenium')
于 2020-07-19T17:04:57.997 回答