Selenium,Firefox geckodriver不会在互联网速度较慢时等待页面完全加载

Selenium,Firefox geckodriver不会在互联网速度较慢时等待页面完全加载,selenium,firefox,geckodriver,Selenium,Firefox,Geckodriver,我使用selenium和Firefox驱动程序(geckodriver)从URL列表中获取一些页面源代码 我注意到,如果互联网速度较慢,FireFox不会等到页面完全加载(执行不会等到第5行)。因此,第9行中的页面源实际上来自上一个url 如何让Firefox等待页面完全加载 硒:3.14.1 壁虎河:0.23.0 linux64 1 browser = webdriver.Firefox() 2 3 for url in url_list: 4

我使用selenium和Firefox驱动程序(geckodriver)从URL列表中获取一些页面源代码

我注意到,如果互联网速度较慢,FireFox不会等到页面完全加载(执行不会等到第5行)。因此,第9行中的页面源实际上来自上一个url

如何让Firefox等待页面完全加载

硒:3.14.1
壁虎河:0.23.0 linux64

1        browser = webdriver.Firefox()
2    
3        for url in url_list:
4          
5            browser.get(url)
6    
7            sleep(1)
8    
9            page_source = browser.page_source
10    
11           if  html == page_source:
12    
13                print "error: page not fully loaded"
14    
15                exit(1)
16           html = page_source

更新:我已经测试了Chrome驱动程序。Chrome驱动程序会等待页面完全加载。所以问题可能出在FireFox驱动程序上

您可以使用WebDriverWait等待,直到找到特定元素,或者在网络速度减慢的情况下,还可以添加隐式等待,然后获取页面源

请查找以下java代码:

WebDriverWait wait = new WebDriverWait(driver, 20);

wait.until(ExpectedConditions.stalenessOf(element));
通常,SeleniumWebDriver中的“.get”是使用HTTP get操作完成的,该方法将一直阻塞,直到加载完成。因此,我不认为互联网连接速度慢会导致问题,但如果你中断了互联网连接,问题就有可能发生

如果页面相同,则可以利用显式等待等待页面上的任何元素,如果元素不可见或未加载,则可以再次单击“.get”方法,或者根据需要执行“.refresh()”方法

显然,如果页面不同,则使用显式wait等待body标记[xpath://body”]加载


有关显式等待的更多详细信息

您必须检查浏览器中加载页面的就绪状态是否已完成,直到您可以使用wait For driver,t将抛出错误,因此您应该将其放入try-catch块中

driver.get(url)
WebDriverWait(driver, 30).until(readystate_complete)
有不同的就绪状态,如
加载、完成和交互
通常在javascript中,人们会记录文档。readystate

完整意味着文档已被完全读取,所有资源(如图像)也已加载

什么是
html
,如
如果html==page\u source:
?html存储以前URL的页面源如果连接良好,该方法将阻塞,直到加载完成。如果连接中断。FireFox驱动程序未被阻止。我用铬做了测试。Chrome驱动程序在加载完成之前会被阻塞。所以可能是FireFox驱动程序的问题。