当前位置: 首页 > 面试题库 >

如何让Selenium不要等到整个页面加载后脚本运行缓慢?

白腾
2023-03-14
问题内容

selenium要driver.get (url)等到整个页面加载完毕。但是,抓取页面尝试加载一些无效的JS脚本。因此,我的Python脚本正在等待它,并且无法在几分钟内运行。该问题可能出现在网站的每个页面上。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.cortinadecor.com/productos/17/estores-enrollables-screen/estores-screen-corti-3000')
# It try load: https://www.cetelem.es/eCommerceCalculadora/resources/js/eCalculadoraCetelemCombo.js 
driver.find_element_by_name('ANCHO').send_keys("100")

如何限制等待时间,阻止文件的AJAX加载或其他方式?

我也在中测试了我的脚本webdriver.Chrome(),但将使用PhantomJS()或可能使用Firefox()。因此,如果某些方法使用了浏览器设置的更改,那么它必须是通用的。


问题答案:

当Selenium默认加载页面/ URL时,它将遵循默认配置,pageLoadStrategy设置为normal。为了使Selenium不等待整个页面加载,我们可以配置pageLoadStrategypageLoadStrategy支持3个不同的值,如下所示:

  1. normal (整页加载)
  2. eager (互动)
  3. none

这是配置代码的代码块pageLoadStrategy:

火狐:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities().FIREFOX
caps["pageLoadStrategy"] = "normal"  #  complete
#caps["pageLoadStrategy"] = "eager"  #  interactive
#caps["pageLoadStrategy"] = "none"
driver = webdriver.Firefox(desired_capabilities=caps, executable_path=r'C:\path\to\geckodriver.exe')
driver.get("http://google.com")

铬:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "normal"  #  complete
#caps["pageLoadStrategy"] = "eager"  #  interactive
#caps["pageLoadStrategy"] = "none"
driver = webdriver.Chrome(desired_capabilities=caps, executable_path=r'C:\path\to\chromedriver.exe')
driver.get("http://google.com")


 类似资料:
  • 我正在使用Python 2.7与火狐的硒网络驱动程序,我有一个问题,我不能解决或在互联网上找到解决。我的任务是打开大约10k个网页(adsl路由器Web界面 - 通过IP地址)并上传新固件。我写了代码,但为了完成它,我必须学习如何使硒webdriver不要像永远一样等待页面加载,而是等待2分钟(这是新固件上传所需的时间),然后继续下一步。我以为我让它永远等待(等待路由器重新连接 - 速度慢得多,但

  • 我正在使用selenium web驱动程序3.4.0查找网站的响应时间。在较早的版本中,我使用了WebDriver wait=new WebDriverWait(driver,10);Wait.Until(ExpectedConditions.VisibilityOfElementLocated(By.id(“myid”)));查找加载的页面。 但这两行代码不适用于版本3.4.0。有没有其他方法可

  • 我告诉Selenium等到它看到一个元素-Selenium看到它我告诉Selenium点击这个元素,它是一个链接到一个新页面的按钮-Selenium点击它。 问题是点击之后,Selenium然后会等到下一个页面满载(页面有时候一秒钟就加载了,或者等了好久,我觉得是那个页面上的Zen Desk Live Chat的问题)。 当它被完全加载时,它会抛出一个错误,说它点击的元素不能看到(当然不能看到,因

  • 我已经用C#启动了一个Selenium项目。试图等待页面完成加载,然后才进行下一个操作。 我的代码如下所示: 在LoginPage.SelectRole(TestCase.orgUnit)中: 我搜索元素RolehierachyLabel。我一直在尝试使用多种方法来等待页面加载或搜索允许一些超时的元素属性: 你将如何解决这个障碍?

  • 我正在尝试使用JSOUP解析一个网页并提取数据。但该链接是动态的,在显示详细信息之前会弹出一个等待加载页面。因此Jsoup似乎处理等待页面而不是详细信息页面。有没有让它等到页面完全加载?

  • 我想在点击后获取页面的页面源。然后使用browser.back()函数返回。但是Selenium不会让页面在点击后完全加载,并且由JavaScript生成的内容不包含在该页面的页面源中。