相关疑难解决方法(0)

在Python/Firefox无头抓取脚本中"无法解读来自木偶的响应"消息

美好的一天,我已经在这里和谷歌进行了一些搜索,但还没有找到解决这个问题的解决方案.

场景是:

我有一个Python脚本(2.7)循环遍历许多URL(例如,想想亚马逊页面,抓取评论).每个页面都有相同的HTML布局,只是抓取不同的信息.我使用Selenium和无头浏览器,因为这些页面需要执行javascript以获取信息.

我在本地计算机上运行此脚本(OSX 10.10).Firefox是最新的v59.Selenium版本为3.11.0,使用geckodriver v0.20.

这个脚本在本地没有问题,它可以运行所有的URL并刮除页面没有问题.

现在,当我将脚本放在我的服务器上时,唯一的区别是它是Ubuntu 16.04(32位).我使用适当的geckodriver(仍然是v0.20),但其他一切都是相同的(Python 2.7,Selenium 3.11).它似乎随机崩溃无头浏览器,然后所有browserObjt.get('url...')不再工作.

错误消息说:

消息:无法解读牵线木偶的响应

任何进一步的页面selenium请求都会返回错误:

消息:尝试在不建立连接的情况下运行命令


要显示一些代码:

当我创建驱动程序时:

    options = Options()
    options.set_headless(headless=True)

    driver = webdriver.Firefox(
        firefox_options=options,
        executable_path=config.GECKODRIVER
    )
Run Code Online (Sandbox Code Playgroud)

driver作为参数传递给脚本的函数,browserObj然后用于调用特定页面,然后一旦加载它就传递给BeautifulSoup进行解析:

browserObj.get(url)

soup = BeautifulSoup(browserObj.page_source, 'lxml')
Run Code Online (Sandbox Code Playgroud)

该错误可能指向正在崩溃浏览器的BeautifulSoup行.

可能导致此问题的原因,我该怎么做才能解决问题?


编辑:添加指向同一事物的堆栈跟踪:

Traceback (most recent call last):
  File "main.py", line 164, in <module>
    getLeague
  File "/home/ps/dataparsing/XXX/yyy.py", line 48, in BBB
    soup = BeautifulSoup(browserObj.page_source, 'lxml')
  File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 670, in page_source
    return self.execute(Command.GET_PAGE_SOURCE)['value']
  File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", …
Run Code Online (Sandbox Code Playgroud)

python firefox selenium web-scraping geckodriver

15
推荐指数
3
解决办法
1万
查看次数

Python selenium:selenium.common.exceptions.NoSuchWindowException:消息:浏览上下文已被丢弃

我有以下代码...

# instantiate web driver
profile = webdriver.FirefoxProfile("C:\\Users\\me\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\me.default")
driver = webdriver.Firefox(firefox_profile=profile)
driver.wait = WebDriverWait(driver, 5)

# browse to bot detection page
driver.get("https://botometer.iuni.iu.edu")

# click dropdown button on navbar
button = driver.wait.until(EC.presence_of_element_located((By.CLASS_NAME, "dropdown-toggle")))
button.click()

# click login link
login_link = driver.wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Log In")))
login_link.click()

# switch to authorize window
new_window = driver.window_handles[1]
driver.switch_to.window(new_window)

# click authorize button 
authorize_button = driver.wait.until(EC.presence_of_element_located((By.ID, "allow")))
authorize_button.click()
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)

...执行以下操作:

  1. 实例化Web驱动程序
  2. 导航到页面
  3. 单击页面上的按钮以打开新窗口
  4. 切换到新窗口
  5. 单击新窗口中的另一个按钮

不幸的是,单击第一个按钮后,新窗口将永远不会打开,并且程序会因以下错误而终止:

selenium.common.exceptions.NoSuchWindowException: Message: Browsing context has been discarded
Run Code Online (Sandbox Code Playgroud)

今天之前一切正常,我不确定发生了什么。有任何想法吗?

python selenium

6
推荐指数
1
解决办法
2487
查看次数

标签 统计

python ×2

selenium ×2

firefox ×1

geckodriver ×1

web-scraping ×1