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

等待表完全使用selenium和python加载

束俊材
2023-03-14
问题内容

我想从表格中的页面中抓取一些数据。所以我只为表中的数据而烦恼。之前我使用过Mechanize,但有时发现某些数据丢失了,尤其是在表格的底部。谷歌搜索,我发现这可能是由于机械化无法处理Jquery
/ Ajax。

所以我今天改用selenium。我该如何等待一个只有一个表完全加载,然后使用Selenium和python从该表中提取所有链接?如果我等待整个页面加载,则需要一些时间。我想确保仅加载表中的数据。我当前的代码:

驱动程序= webdriver.Firefox()
对于范围(1、2)中的页面:
    driver.get(“ http://somesite.com/page/” + str(page))
    表格= driver.find_element_by_css_selector('div.datatable')
    链接= table.find_elements_by_tag_name('a')
    对于链接中的链接:
        打印link.text

问题答案:

使用WebDriverWait要等到表位于:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

...
wait = WebDriverWait(driver, 10)
table = wait.until(EC.presence_of_element_located(By.CSS_SELECTOR, 'div.datatable'))

这将是 明显的等待

或者,您可以使驱动程序 隐式等待

隐式等待是告诉WebDriver在尝试查找一个或多个元素(如果不是立即可用)时轮询DOM一定时间。默认设置为0。设置后,将在WebDriver对象实例的生存期内设置隐式等待。

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10) # wait up to 10 seconds while trying to locate elements
for page in range(1, 2):
    driver.get("http://somesite.com/page/"+str(page))
    table = driver.find_element_by_css_selector('div.datatable')
    links = table.find_elements_by_tag_name('a')
    for link in links:
        print link.text


 类似资料:
  • 我试过下面的方法,但效果不理想。

  • 问题内容: 我编写了一个脚本,该脚本从页面中获取数据,但是有时页面需要花费一些时间来加载,因此当将html拉到汤对象中时,有时它什么也不会拉,因为页面仍然需要完成。 我编写了以下代码以等待页面完成。 有用 但是调用函数时出现以下错误; 问题答案: 我认为您应该这样使用: 如手册所述。

  • 我经常遇到Selenium的问题,脚本崩溃,因为我想访问尚未加载的元素。 目前我是这样做的,我在这些地方之前放了一个,但有时需要更长或更短的时间才能加载元素。 有没有办法等到元素加载完毕,一旦加载,立即继续执行其余的代码?

  • 问题内容: 我正在执行浏览器自动化,并且在某个时候被阻止:稍后,我要求浏览器单击一个按钮,该按钮又打开一个新窗口。但是有时Internet太慢,因此加载新窗口需要时间。我想知道如何让Selenium等待,直到这个新窗口完全加载完毕。 这是我的代码: 我不时收到此错误: newNewWindow = newWindow [1] IndexError:列表索引超出范围 这让我认为简单的“ time.s

  • 如何让代码等待页面在Nodejs中完全加载?我使用SeleniumWebDriver版本4.0。0

  • 我设法用Selenium静默下载了文件。但是Firefox通过添加1、2、3自动重命名该文件。文件名,因为服务器发送的每个文件都具有相同的名称。但我想根据当前的日期和时间重命名文件。于是,试着: > 开始下载文件->DownloadLink.Click(); 而(不存在带有原始名称的文件或不存在 .part) · · { } 将下载的文件重命名为所需的名称。 但它会重命名一些文件。有些文件长度为0