Python 类型错误:';str';对象在尝试单击时不可调用;“日期选择器”;

Python 类型错误:';str';对象在尝试单击时不可调用;“日期选择器”;,python,python-2.7,xpath,selenium-webdriver,Python,Python 2.7,Xpath,Selenium Webdriver,相关的HTML <div id="datepickerbox" class="ym-gbox-left"> <div class="datepick_label"> <div id="datepicker" class="hasDatepicker"> <div class="ui-datepicker-inline ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui

相关的HTML

<div id="datepickerbox" class="ym-gbox-left">
 <div class="datepick_label">
  <div id="datepicker" class="hasDatepicker">
   <div class="ui-datepicker-inline ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" style="display: block;">
我犯的错误

self.driver.find_element(By.XPATH('//*[@id="datepicker"]')).click()
TypeError: 'str' object is not callable
如何实现这一点?

根据手册的说明,
By.XPATH
似乎是一个字符串,正确的用法如下:

self.driver.find_element(By.XPATH, '//*[@id="datepicker"]')
从错误消息中也可以看出这一点,因为您正在通过.XPATH调用
。这也证实了这一点


不幸的是,Selenium API在不同平台上并不完全一致。Java使用的语法是通过.xpath()调用
By.xpath()
,在C#中,还必须通过.xpath()调用
By.xpath()
。因此,当您看到调用它的其他示例时,您自然会感到困惑,而在Python中,您突然需要传递它。因此,你不应该盲目相信你在互联网上找到的例子(比如),而应该经常检查它们是哪种语言。并检查有疑问的文档和/或来源。

如果要使用通用的
find_element()
方法,请传递两个参数-
By
定位器类型和定位器值:

self.driver.find_element(By.XPATH, '//*[@id="datepicker"]')
不过,使用特定的
find\u element\u by\u xpath()
方法会更简洁:

self.driver.find_element_by_xpath('//*[@id="datepicker"]')
而且,在这种情况下,更干净的是使用“按id”定位器:


因此,我从这个错误中发现,有时网站会加载一个框架,通过打印html->
print(driver.page\u source)
将为您提供驱动程序可以“看到”的内容。如果您在页面源代码中找不到您的元素,那么这就是您的问题

我通过在frame元素中找到一个.php链接,然后将该链接添加到当前url来修复此问题,下面是一个示例:给定
www.site.com/login
打印页面源代码,如果这是问题所在,则框架中会有一个.php链接(例如,
/loginPage.php
。单击链接,复制它并执行
.get([new url])
。这使我进入了一个相同的页面,但您可以像平常一样访问html元素


编辑:谢谢Stephen第一次告诉我添加
code
的诀窍!

大概
find\u element
XPATH
click
中有一个是字符串,所以你不能调用它。@kevin:我知道其中一个是导致问题的原因,但我如何纠正/纠正它呢???看起来应该是
self driver.find_元素(By.XPATH,'/*[@id=“datepicker”]')。单击()
,将By.XPATH作为参数传递,不要尝试调用it@PadraicCunningham我尝试了self.driver.find_元素(By.XPATH,('/*[@id=“datepicker”]”)。click()但是我得到了这个“No-this-element”错误。那么您的XPATH可能是错误的。我尝试了self.driver.find_元素(By.XPATH,('/*[@id=“datepicker”])).click()但是我得到了这个“NoSuchElementException:消息:没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:”//*[@id=“datepicker”]“}”那么您就更接近事实了。它现在可以工作了,但是没有与XPath字符串匹配的元素。我已经尝试了上述所有建议的方法,结果here@kumar页面上是否有
iframe
元素?此网站中没有iframepage@kumar然后,您可能需要等待datepicker出现,假设您的定位符是正确的。请参阅。我尝试了以下操作:self.driver.implicitly_wait(“20”)self.driver.find_element_by_xpath(“/*[@id=“datepicker”]”)。click()仍然不走运
self.driver.find_element_by_xpath('//*[@id="datepicker"]')
self.driver.find_element_by_id("datepicker")