这是我在 Stack Overflow 上的第一篇文章。我一直在浏览和搜索这个问题的每一个可能的答案,我想在这一点上我应该问一个问题,因为我已经在这堵墙上呆了好几天了。我目前正在使用 Python 中的 Selenium 开发一个网络抓取项目。我已经抓取了一个网站,目前正在抓取第二个网站,并且遇到了一个看似棘手的问题。以下代码运行良好,页面上没有错误https://www.spd.de/standpunkte/ https://www.spd.de/standpunkte/:
try:
driver.find_element_by_link_text("Familien").click()
except NoSuchElementException:
WebDriverWait(driver, 12).until("Familien").click()
同时,以下代码会抛出错误TypeError: 'str' object is not callable
在页面上https://www.spd.de/standpunkte/familie/ https://www.spd.de/standpunkte/familie/:
try:
driver.find_element_by_link_text("Mehr erfahren").click()
except NoSuchElementException:
WebDriverWait(driver, 12).until("Mehr erfahren").click()
错误发生在线路上WebDriverWait(driver, 12).until("Mehr erfahren").click()
。根据我迄今为止的研究,我认为具体问题是这行中的某些内容被解释为str
对象,因此无法被调用。在我看来,有两个问题:
-
我看不出这一行有任何理由产生错误,而顶部的代码抓取同一网站但在不同的页面上却可以正常工作。我检查并确保页面上没有被单击的隐藏元素。
-
我不知道该行中的什么被视为str
目的。整条线?只有一部分吗?如果有,是哪一部分?更糟糕的是,我无法真正分解这条线来查看任何相关信息;两个都print(WebDriverWait(driver, 12).until("Mehr erfahren").click())
and print(type(WebDriverWait(driver, 12).until("Mehr erfahren").click()))
只是最终给出了错误。我能够确定.click()
方法不是问题,因为我尝试将该行设置为等于变量,然后与该变量交互,但这仍然在与之前相同的行上产生错误;它甚至从未到达过.click()
method.
有什么方法可以确定该行的哪一部分被解释为str
?或者这根本就是问题所在吗?
这让我发疯,所以非常感谢您的帮助!
我想我找到了你的问题here https://github.com/SeleniumHQ/selenium/blob/941dc9c6b2e2aa4f701c1b72be8de03d4b7e996a/py/selenium/webdriver/support/wait.py#L63。从源头上
def until(self, method, message=''):
...
until
采用一个方法(即可调用的方法)。所以,当driver.find_element_by_link_text("Mehr erfahren").click()
引发异常,它将尝试调用...until("Mehr erfahren")...
. Since until
期望有一个方法会尝试调用您给它的字符串 - 引发让您发疯的错误:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)