Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PythonSelenium,Firefox突然变为空白并停止工作_Python_Selenium_Firefox_Browser - Fatal编程技术网

PythonSelenium,Firefox突然变为空白并停止工作

PythonSelenium,Firefox突然变为空白并停止工作,python,selenium,firefox,browser,Python,Selenium,Firefox,Browser,我正在使用python selenium解析来自10000多个URL的大量数据。浏览器是Firefox 对于每个url,将打开一个Firefox浏览器,在数据解析后,它将关闭,并等待5秒钟,然后通过Firefox打开下一个url 然而,这几天发生了两次,一切都很顺利,突然,新打开的浏览器是空白的,根本没有加载url。在现实生活中,有时,甚至当我手动打开浏览器搜索某个内容时,它也是空白的 问题是,当发生这种情况时,根本没有错误,即使我编写了except代码来捕获任何异常,同时我使用nohup命令来

我正在使用python selenium解析来自10000多个URL的大量数据。浏览器是Firefox

对于每个url,将打开一个Firefox浏览器,在数据解析后,它将关闭,并等待5秒钟,然后通过Firefox打开下一个url

然而,这几天发生了两次,一切都很顺利,突然,新打开的浏览器是空白的,根本没有加载url。在现实生活中,有时,甚至当我手动打开浏览器搜索某个内容时,它也是空白的

问题是,当发生这种情况时,根本没有错误,即使我编写了except代码来捕获任何异常,同时我使用
nohup
命令来运行代码,它也会记录任何异常,但根本没有错误。一旦发生这种情况,代码将不再被执行,许多URL将留在那里而不被解析。。。。如果我在rest URL上重新运行代码,它会再次正常工作

这是我的代码(所有10000多个URL都在comment\u URL列表中):

同时,在数据解析部分,如果有任何异常,我的代码也会记录异常并关闭驱动程序,等待5秒钟。但到目前为止,没有任何错误记录

我试图在网上找到类似的问题和解决方案,但这些都没有帮助

所以,目前,我有两个问题要问:

  • 你以前遇到过这个问题吗?你知道如何处理它吗?是网络问题还是硒问题还是浏览器问题
  • 或者在python中是否存在这样的情况,即它可以告诉浏览器没有加载url,并且它将关闭url

  • 对于第二个问题,我们更喜欢使用工作队列来解析URL。一个应用程序应该将它们全部添加到队列(redis、rabbit mq、amazon sqs等),然后第二个应用程序应该从队列中获取1个url并尝试解析它。若成功,它应该从队列中删除url并切换到队列中的其他url。在异常情况下,应退出操作系统(1)以停止应用程序。使用shell运行第二个应用程序,当它返回1时,意味着发生错误,请重新启动该应用程序。Shell脚本:

    回答您的两个问题:

    1) 是的,我发现硒有时是不可预测的。这通常是在第一次打开浏览器时出现的问题,我将在解决方案中介绍。除非需要,否则不要关闭浏览器

    2) 是的,您可以使用selenium.webdriver.support.wait中的WebDriverWait()类

    您说您正在解析数千条注释,所以只需使用打开的webdriver发出一个新的get请求

    我在自己的刮板中使用此代码,代码如下:

    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    browser = webdriver.Firefox()
    browser.get("http://someurl.com")
    table = WebDriverWait(browser,60).until(EC.presence_of_element_located((By.TAG_NAME, "table")))`
    
    变量browser只是webdriver.Firefox()类

    它有点长,但它所做的是等待页面上存在一个特定的html标记,超时时间为60秒


    您可能正在经历自己的时间。sleep()也会锁定线程。尽量不要用睡眠来补偿这种情况。

    尝试关闭硬件加速:我从这个解决方案开始,这些天代码一直在运行,但今天它突然停止而没有完成。好消息是,这一次,浏览器不再崩溃,但出现了一个弹出窗口,询问安全服务的主密码,并停止了我的代码。然而,它没有告诉哪个安全服务。所以我想知道这是因为Mac可能有一些安全设置?还是我们学校实验室的安全保护?还是其他原因?这台机器有多个帐户,我使用的不是主帐户。有什么想法吗?这取决于该页面的截图和url。没有它,猜测发生了什么是非常困难的。Firefox有自己的Firefox同步主密码,但据我所知,您不在selenium浏览器(Firefox驱动程序)中使用同步。因此,这可能是由于网站或校园。
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    browser = webdriver.Firefox()
    browser.get("http://someurl.com")
    table = WebDriverWait(browser,60).until(EC.presence_of_element_located((By.TAG_NAME, "table")))`