如何解决类型错误:使用 Selenium 和 Python 遍历 HTML 中的有序列表时,“FirefoxWebElement”对象不是可迭代错误
我正在尝试编写一个脚本,让我在 Google Classroom 上为我提供当天的作业,并且有一个下拉菜单,其中包含“ol”和“/ol”标签内的所有不同作业。 当我尝试通过它并将工作放入带有名称和类别的字典中时,出现错误:
TypeError: 'FirefoxWebElement' object is not iterable
我不知道为什么,因为我认为列表应该是可迭代的。
(有代码):
def get_work(schoolUser,schoolPassword):
browser = webdriver.Firefox()
browser.get("https://classroom.google.com/u/0/h")
browser.maximize_window()
emailLogin = browser.find_element_by_xpath('//*[@id ="identifierId"]')
emailLogin.send_keys(schoolUser + Keys.ENTER)
password = WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH,"//input[@name='password']")))
passwordLogin.send_keys(schoolPassword + Keys.ENTER)
browser.implicitly_wait(123)
browser.find_element_by_class_name("R06fGe").click() #Work To Do
noDueDateList = browser.find_element_by_class_name("e2urcc")
homework = browser.find_element_by_tag_name("li")
work = {}
for homework in enumerate(noDueDateList):
work["{0}".format(homework.text): "a"]
(顺便说一句,我不知道如何使用字典,因此字典的最后部分可能是错误的,但我会弄清楚的。)
还有一种过于简化的 HTML 版本:
<div class>
<ol class="classname" etc...>
<li class = "classname1" insert bunch of attributes here>
<li class = "classname2" insert bunch of attributes here>
<li class = "classname1" insert bunch of attributes here>
</ol>
</div>
解决方法
将 emailLogin = browser.find_elements_by_xpath('//*[@id ="identifierId"]')
替换为 {{1}}
您的问题不是很清楚,确切的问题是什么以及 html 的外观,但是如果 e2urcc
是您的 ol
的类并且您想要所有 {{1}比你可以这样走:
li
,
这个错误信息...
TypeError: 'FirefoxWebElement' object is not iterable
...暗示您正在尝试遍历 WebElement,其中只有 list 对象是可迭代的。
解决方案
在 for()
循环中创建一个 list 以遍历它的元素,而不是使用 find_element*
,您需要使用 find_elements*
强>。所以你的有效代码块将是:
noDueDateList = browser.find_elements_by_class_name("e2urcc")
homework = browser.find_element_by_tag_name("li")
work = {}
for homework in enumerate(noDueDateList):
work["{0}".format(homework.text): "a"]
参考文献
您可以在以下位置找到一些相关的详细讨论:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。