【发布时间】:2018-08-27 14:02:09
【问题描述】:
我想从这个网站获取表格内容:“https://www.premierleague.com/stats/top/players/red_card?se=42&cl=2”。什么时候 我检查元素,在 Chrome 浏览器上,我可以在浏览器中显示的 DOMTree 中找到表条目。但是当我运行以下代码时,我得到了一个与https://www.premierleague.com/stats/top/players/red_card 中的表相对应的不同表。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
BASEURL = "https://www.premierleague.com/stats/top/players/"
driver = webdriver.Chrome("/Users/manpreet/Downloads/chromedriver")
driver.get("https://www.premierleague.com/stats/top/players/red_card?se=42&cl=2")
##for i in range(5000):
## print i
## time.sleep(1)
try:
elem = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="mainContent"]/div[2]/div/div[2]/div[1]/div[2]/table'))
)
finally:
print('10 secs over')
print(elem.text)
我调用了 WebDriverWait 函数长达 30 秒,但我没有得到正确的表。我注意到,当我使用 WebDriverWait 时,Selenium 打开的浏览器会在整个 30 秒的时间内显示 https://www.premierleague.com/stats/top/players/red_card 中的表格。但是当我不使用WebDriverWait时,驱动程序首先在https://www.premierleague.com/stats/top/players/red_card中显示表格,页面加载几秒钟然后在https://www.premierleague.com/stats/top/players/red_card?se=42&cl=2中显示表格。整个过程只需要大约5-6秒(最多)。我认为当我使用 WebDriverWait 时 Ajax 调用会卡住。这可能是 selenium 无法返回正确表格的原因,因为 Selenium 会抓取显示的内容。
谁能告诉我如何获得正确的表格?
【问题讨论】:
标签: ajax selenium dom web-crawler