示例页面源代码如下
<div class='div1'>
<table class="foot-market">
<tbody data-live="false">
<td class='today-name'/>
</tbody>
<tbody data-live="false">
<td class='today-name'/>
</tbody>
<tbody data-live="false">
<td class='today-name'/>
</tbody>
</table
<table class="foot-market">
<tbody data-live="false">
<td class='today-name'/>
</tbody>
<tbody data-live="false">
<td class='today-name'/>
</tbody>
<tbody data-live="false">
<td class='today-name'/>
</tbody>
</table
</div>
解释
嗨,
所以,让我们来做吧。
如上所示,我与之交互的代码段位于<div class='div1'>
中。
<td class='today-name'>
是可点击的,点击后会显示一个页面(感兴趣的页面)
所以我想循环获取每个<tbody data-live="false">
并点击它。
从我的研究中我发现没有类似的东西,但我找到了有趣的东西,但没有任何帮助。我感谢所有给予的帮助。
感谢。
我的代码
import time
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.firefox.options import Options
from BeautifulSoup import BeautifulSoup
#some of the imports are for headless firefox so don't mind them
#for.testing.purposes.only
driver = webdriver.Firefox()
url = 'here://code.above.com/'
driver.get(url)
#looping rows in selenium
table = driver.find_elements_by_xpath("//table[@class='foot-market']")
for row in table.find_element_by_xpath("//tbody[@data-live='false']"):
row.find_element_by_xpath("//td[@class='today-name']").click()
#try for one row first
# driver.back()
break
错误
返回的错误符合:
for row in table.find_element_by_xpath("//td[@data-live='false']"):
异常:
AttributeError:&#39; list&#39;对象没有属性&#39; find_element_by_xpath&#39;
这是有道理的,但我怎么做到这一点......
答案 0 :(得分:1)
您看到的错误说明了一切:
for row in table.find_element_by_xpath("//td[@data-live='false']"): AttributeError: 'list' object has no attribute 'find_element_by_xpath'
以下行容易出错:
for row in table.find_element_by_xpath("//td[@data-live='false']"):
根据您之前的行:
table = driver.find_elements_by_xpath("//table[@class='foot-market']")
表是列表,您无法在列表上调用find_element_by_xpath()
。可以在 webdriver 实例或 webelement 上调用find_element_by_xpath()
。
您的工作代码如下:
all_tds = driver.find_elements_by_xpath("//table[@class='foot-market']//td[@class='today-name']")
for tds in all_tds :
tds.click()
#try for one row first and break out
break
注意:这是克服错误
的基本解决方案AttributeError: 'list' object has no attribute 'find_element_by_xpath'
和try for one row first
如果您打算遍历表格中的所有td
元素,那么您必须捕获基本网址,以便我们可以恢复到主页面以查找和点击后续元素,如下所示:
base_url = driver.current_url
count_all_tds = len(driver.find_elements_by_xpath("//table[@class='foot-market']//td[@class='today-name']"))
for td in range(count_all_tds):
driver.find_elements_by_xpath("//table[@class='foot-market']//td[@class='today-name']")[td].click()
# code block for other required actions and finally redirect to base_url
driver.get(base_url)