这是表格在网页上的样子(它只是一列):
以下是我试图抓取的表格的HTML:
如果重要,该表嵌套在另一个表中。
这是我的代码:
def filter_changed_records():
# Scrape webpage for addresses from table of changed properties
row_number = 0
results_frame = locate_element(
'//*[@id="oGridFrame"]'
)
driver.switch_to.frame(results_frame)
while True:
try:
address = locate_element("id('row" + str(row_number) +
"FC')/x:td")
print(address)
changed_addresses.append(address)
row_number += 1
except:
print("No more addresses to add.")
break
如您所见,有一个<tr>
标记,其ID为row0FC
。这个表是动态生成的,每个新的<tr>
都会获得一个数字越来越大的id:row0FC, row1FC, row2FC
等。这就是我计划迭代所有条目并将它们添加到列表中的方式。
我的locate_element函数如下:
def locate_element(path):
element = WebDriverWait(driver, 50).until(
EC.presence_of_element_located((By.XPATH, path)))
return element
在找不到元素后50秒后总是超时。不确定如何进行。有没有更好的方法来定位元素?
ANDERSSON解决方案
address = locate_element("//tr[@id='row%sFC']/td" % row_number).text
答案 0 :(得分:0)
您的XPath
似乎不正确。
尝试以下:
address = locate_element("//tr[@id='row%sFC']/td" % row_number)
另请注意,address
是WebElement
。如果要获取其文本内容,则应使用
address = locate_element("//tr[@id='row%sFC']/td" % row_number).text
答案 1 :(得分:-1)
用硒解析html很慢。我会使用BeautifulSoup。
假设您已在驱动程序中加载页面,它将类似于:
from bs4 import BeautifulSoup
....
soup = BeautifulSoup(driver.page_source, "html.parser")
td_list = soup.findAll('td')
for td in td_list:
try:
addr = td['title']
print(addr)
except:
pass