当前位置: 首页 > 知识库问答 >
问题:

WebDriverException:消息:{“errorMessage”:“null不是对象

章涵蓄
2023-03-14

WebDriverException:消息:{“errorMessage”:“null不是对象(靠近'...ull).singlenodevalue.click();...')”,“请求”:{“headers”:{“accept”:“application/json”,“accept-encoding”:“identity”,“connection”:“close”,“content-length”:“application/json”,“content-type”:“223”,“content-type”:“application/json;charset=UTF-8”,“host”:“-10e4-11e8-8645-3d3d785f60f2\”,\“args\”:[],\“script\”:\“window.document.evaluate('/html/body/div[3]/div1/div1/div[10]/a/div1/div[2]',document,null,9,null).singlenodeValue.click();\”}“,”URL“:”/execute“,”urlparsed“:{”锚“:”“,”查询“:”“,”文件“:”execute“,”目录“:”/“,”path“::”“、”主机“:”、“密码”:“、”用户“:”、“用户信息”:“、”授权“:”、“协议”:“、”源“:”/execute“、”查询键“:{}、”块“:[”execute“]}、”urloriginal“:”/session/ddd5e2d0-10e4-11e8-8645-3d3d785f60f2/execute“}}截图:通过屏幕提供

这是代码

driver = webdriver.PhantomJS()
driver.implicitly_wait(20)
driver.set_window_size(1120, 550)
driver.get("https://topicolist.com/ongoing-ico")

num_options = len(driver.find_elements_by_class_name("w-dyn-item"))
for i in range(num_options):
    xpath = "/html/body/div[3]/div[1]/div[1]/div[1]/div/div[" + str(i+1) + "]/a/div[1]/div[2]"
    print xpath
    execute_script(driver, xpath)

    project_title = driver.find_elements_by_class_name("heading-49")[0].text.strip()
    print project_title

    time.sleep(10)
    driver.back()

driver.quit()


def execute_script(driver, xpath):
    execute_string = "window.document.evaluate('{}', document, null, 9, null).singleNodeValue.click();".format(xpath)

    return driver.execute_script(execute_string)

共有1个答案

祁乐邦
2023-03-14

您使用一个查询进行计数,另一个查询进行迭代,产生不同的结果。解决这个问题的简单方法是使用相同的查询进行计数和迭代。

哪个查询?这取决于您想要什么,因为您的查询选择了不同的内容(因此您看到的错误):

  1. 您的CSS查询获取所有.w-dyn-item元素;但是这些元素分布在三个.w-dyn-list容器中--一个用于.gold,一个用于.silver,一个用于.bronze-按照目前的情况,
  2. XPath查询只从第一个容器-.gold.
  3. 中获取 .w-dyn-item元素
num_options = len(driver.find_elements_by_css_selector(".w-dyn-list.gold .w-dyn-item"))
# ...
for i in range(num_options):
    xpath = "/html/body/div[3]/div[1]/div[1]/div/div/div[" + str(i+1) + "]/a/div[1]/div[2]"
    # ...

但是仅仅为了单击一个元素,您就要做大量的工作。您不需要使用JavaScript;Selenium提供webelement#click()正是为了这个目的:

items = driver.find_elements_by_class_name("w-dyn-item")
for item in items:
    item.find_element_by_xpath("./a/div/[1]/div[2]").click()

这样更好,但是XPath查询仍然非常具体且不灵活;如果列表项中有关DOM树排列的任何内容发生变化,查询将中断。此外,XPath查询也不会告诉我您试图单击什么,因此无法告诉您为什么要单击它。

相反,由于不再向浏览器发送XPath,您可以使用另一个CSS查询以更灵活的方式更好地表达自己:

items = driver.find_elements_by_class_name("w-dyn-item")
for item in items:
    item.find_element_by_class_name("description").click()
    # ...
item_headings = driver.find_elements_by_css_selector(".w-dyn-item h4")
project_titles = [item_heading.text for item_heading in item_headings]
 类似资料:
  • 问题内容: 我正在尝试使用selenium使用python脚本自动从网站下载数据,但出现以下错误: 代码试用: 现在,我定义了要单击的复选框,然后尝试单击它: 我已经在网上搜索了2个小时,但没有成功。因此欢迎任何想法! 在此先多谢! 问题答案: 有两个与该定位器匹配的元素。第一个不可见,因此我假设您要单击第二个。

  • 在我的聊天应用程序中,每当用户收到新消息时,我使用FCM和Firebase功能发送通知。 为此,我有一个FirebaseMessagingService,它覆盖了。除此之外,此服务还覆盖。每当用户第一次启动应用程序时,就会调用,我检索一个新令牌并将其存储在Firebase实时数据库中。 然后我去和一些用户聊天(不关闭应用程序)。当我收到新消息时,我会收到通知。调用。 问题是,当我关闭应用程序,然后

  • 本文向大家介绍null是对象吗?相关面试题,主要包含被问及null是对象吗?时的应答技巧和注意事项,需要的朋友参考一下 根据ECMA规范,虽然返回,但实质上是值类型,其类型为,并且在中返回并不会做其他转换。

  • 我是WS和CXF的初学者。我想使用AsyncHandler创建异步客户端,但无法获得响应消息。 我有使用 CXF wsdl2java 生成的 Web 服务类和接口,如下所示: - 客户类别 和处理程序 调用< code>response.get()时,会出现< code > Java . lang . classcastexception:Java . lang . object无法转换为MyMe

  • 我试图将与一起使用,我为chromedriver到/usr/local/bin的路径创建了一个符号链接,但当我运行 我的错误是 它还会生成一个核心。******,一个包含五个随机数的核心文件点,大小超过200MB。 版本: 有谁能帮我找出问题出在哪里吗?

  • 我有一个带有WebSockets的应用程序,使用spring-boot应用程序作为后端,在客户端使用stomp/sockjs,spring-boot应用程序使用JMS队列消息并将更改通知给正确的用户。问题出在哪里?有时工作有时不工作,同样的代码和用户可以工作或不工作。 编辑1: 经过更多的调试,当不工作的时候,WebSocket的“会话”似乎被Spring配置丢失了。我看不到任何关于“断开连接”消