- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想获得比赛的所有结果。该网站显示 50 行/页。我使用 selenium 导航到下一页(带有后缀 #page-x 的相同 URL),但每当我尝试在下一页上查找元素(表格单元格 = td)时,都会收到 StaleElementReferenceException 错误。
我尝试在步骤之间关闭驱动程序,以便一次只获取一个元素列表。我还尝试使用 URL+后缀单独加载页面,但无法正确加载。我尝试过构建单独的列表(一开始我想要一个包含所有结果的大列表)。
from selenium import webdriver
url = "https://tickets.justrun.ca/quidchrono.php?a=qcResult&raceid=8444"
#The block under works well and I get a list of cells as intended.
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)
elements = driver.find_elements_by_tag_name("td")
course = []
for i in range(len(elements)):
course.append(elements[i].text)
to_2 = driver.find_element_by_link_text("2")
to_2.click()
print(driver.current_url)
#I'm trying similar code for the next chunk, but it doesn't work.
elements2 = driver.find_elements_by_tag_name("td")
print(len(elements2))
print(elements2[5].text)
course2 = []
for i in range(len(elements2)):
course2.append(elements2[i].text)
driver.close()
我希望得到一个新列表(course2),其中包含第二页的结果,但我收到了陈旧元素错误。当我打印当前 URL 时,结果符合预期。当我打印 len(elements2) 时,也可以。看起来问题出在我尝试获取元素的文本时。
最佳答案
解决方案 1:
使用BeautifulSoup
和selenium
,WebDriverWait正在等待某个条件发生,然后再继续执行代码。有关 BeautifulSoup 的更多详细信息.
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
from bs4 import BeautifulSoup
url = "https://tickets.justrun.ca/quidchrono.php?a=qcResult&raceid=8444"
driver = webdriver.Chrome()
driver.get(url)
data = []
while True:
course = []
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "tableJustrun")))
page_soup = BeautifulSoup(driver.page_source, 'lxml')
# get table data
tbody = page_soup.find("tbody",{"id":"searchResultBoxParticipants"})
rows = tbody.find_all("tr")
for row in rows:
rowData = []
for td in row.find_all("td"):
rowData.append(td.text)
course.append(rowData)
data.append(course)
try:
pagination = driver.find_element_by_class_name("simple-pagination")
next_page = pagination.find_element_by_link_text("Suivant")
# iterate next page
next_page.click()
except Exception as e:
break
print(data)
解决方案 2:
使用pandas
库。
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 pandas as pd
url = "https://tickets.justrun.ca/quidchrono.php?a=qcResult&raceid=8444"
driver = webdriver.Chrome()
driver.get(url)
data = []
while True:
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "tableJustrun")))
tables = pd.read_html(driver.page_source)
#append Participants table data
data.append(tables[0])
try:
pagination = driver.find_element_by_class_name("simple-pagination")
next_page = pagination.find_element_by_link_text("Suivant")
# iterate next page
next_page.click()
except Exception as e:
break
#Concat dataframe object
result = pd.concat(data)
print(result)
关于python - 从不同页面获取元素时如何避免 StaleElementReferenceError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561331/
我想获得比赛的所有结果。该网站显示 50 行/页。我使用 selenium 导航到下一页(带有后缀 #page-x 的相同 URL),但每当我尝试在下一页上查找元素(表格单元格 = td)时,都会收到
我的应用程序从数据库中获取 ID 列表。我用游标遍历这些,对于每个 ID,我将它插入带有 Selenium 的 URL 以获取页面上的特定项目。这是对关键字进行搜索并获取与该搜索最相关的项目。数据库中
我在使用 Selenium 驱动程序的 Ruby 1.9.3 中使用 Capybara,以便从网站上获取信息。单击几个页面后,我访问了我想要的页面并输入: all(:css, 'td').each
这不是我的实际代码,但场景完全一样。 mysite.com 是这样的:
在我的 Angular 应用程序中,当用户打开页面时,我们首先加载缓存的内容,然后通过异步调用服务器来轮询实际数据并更新页面。我正在尝试访问已显示的元素,但该元素的指针已更改,因为页面内容已更新,即使
我正在尝试单击 stackoveflow 水平菜单上的所有链接(问题、标签、用户、徽章、未回答)。我有这段代码,但它点击了第一个链接(这个链接是问题),然后打印 1,然后出现错误。这可能有什么问题?
我正在做一个基于摩卡的测试。 Node v8.2.1,selenium-webdriver:^3.5.0。 test.it('demoClass', () => { driver.classes[
我的测试 e2e 有问题。我正在阅读大量 Protractor 和 Selenium ,但没有找到解决方案。 我的测试 e2e 是: it('Recorro tabla de MCSS, ve
我是一名优秀的程序员,十分优秀!