use*_*014 4 python selenium web-scraping selenium-webdriver
我想从表格中的页面中抓取一些数据。所以我只关心表中的数据。之前我在使用 Mechanize,但我发现有时会丢失一些数据,尤其是在表格底部。谷歌搜索,我发现这可能是由于机械化没有处理 Jquery/Ajax。
所以我今天改用 Selenium。如何等待一个且只有一个表完全加载,然后使用 selenium 和 python 从该表中提取所有链接?如果我等待完整页面加载,则需要一些时间。我想确保只加载表中的数据。我目前的代码:
驱动程序 = webdriver.Firefox()
对于范围(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')
对于链接中的链接:
打印链接.文本
使用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'))
Run Code Online (Sandbox Code Playgroud)
这将是一个明确的等待。
或者,您可以让驱动程序隐式等待:
隐式等待是告诉 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11831 次 |
| 最近记录: |