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

注册机器人

卜和悌
2023-03-14

嗨,我想写注册机器人。

我在python中使用selenium,一开始我遇到了以下问题。

elems = driver.find_elements_by_xpath("//a[@href]")
    for elem in elems:
        elem_ = elem.get_attribute("href")
        regex = re.compile('signup')
        match = re.search(regex, elem_)
        if match:
            print(elem_)
            elem.click()

有了它,我可以找到注册链接,但当我试图点击它时,它会给我:

Message: stale element reference: element is not attached to the page document

我是不是很难适应这种环境?如何在由find_elements_by_something创建的列表中的元素上执行单击功能

共有1个答案

程阳平
2023-03-14

执行click函数的方式是正确的:find_elements函数返回一个WebElements列表,然后调用其中一个元素的click函数。问题出在其他地方。

文档:过时元素引用异常

在以下两种情况中的一种情况下会引发过时元素引用异常,第一种情况比第二种情况更常见:

该元素已被完全删除。

该元素不再附加到DOM。

正如您所见,selenium在DOM结构中找不到元素时抛出异常。

这个问题的通用解决方案并不存在,因为它取决于您正在处理的网页。

通常,这种问题发生在动态页面中,顾名思义,DOM结构是动态生成的。

看起来很简单,一个常见的解决方案是再试一次,只需将其包围在一个try块中,然后重新执行代码:

from selenium.common.exceptions import StaleElementReferenceException

try:
    ...
except StaleElementReferenceException:
    ...

在最坏的情况下,如果您必须执行的唯一操作是单击()按钮,您可以通过ActionChain解决DOM按坐标移动到元素的问题。

from selenium.webdriver.common.action_chains import ActionChains

elem = driver.find_element(By.TAG_NAME, 'body')
ac = ActionChains(driver)
ac.move_to_element(elem).move_by_offset(x_offset, y_offset).click().perform()
 类似资料:
  • 本文向大家介绍基于python脚本实现软件的注册功能(机器码+注册码机制),包括了基于python脚本实现软件的注册功能(机器码+注册码机制)的使用技巧和注意事项,需要的朋友参考一下 一、前言: 目的:完成已有python图像处理工具的注册功能 功能:用户运行程序后,通过文件自动检测认证状态,如果未经认证,就需要注册。注册过程是用户将程序运行后显示的机器码(C盘的卷序号)发回给管理员,管理员对机器

  • 我是android新手。我的项目有一个活动和一个服务。我的服务有一个广播接收器,而活动有一个广播发送器,它在PeriodSender方法中。动态地,当我注册接收者时,在服务开始时它不会调用,但是如果我在几分钟后发送了一些东西,它就会调用。但是我想在清单中注册它,我已经在清单中包含了接收方的详细信息,但是接收方没有调用。我的接收方类名是MyReceiver21,意图操作是My_ACTION1。实际上

  • 自己做的东西,就是怎么看怎么满意,绝影和张厂长都觉得自己写的程序好,周总肯定要用自己的。 周总还是决定用张厂长的程序。绝影用汇编做的,公司以前没尝试过,他还是不想冒这个险,毕竟C语言才是入门语言,大部分程序都懂,以后万一出了什么问题要临时维护也不愁找不到人。 这个决定后来在很长一段时间里让绝影一直耿耿于怀。现在单位里特别是国有单位,年轻人往往对年长的领导腹绯很多,而上了年纪的领导又对这些年轻人意见

  • 主要内容:部署注册表容器注册表是一个存储和内容交付系统,它存储他们的Docker(它是用于运行应用程序的预定义图像的数据库)。 部署注册表 可以使用以下命令部署注册表: 步骤(1): 首先,使用SSH(Secure Shell)登录到您的GitLab服务器。 步骤(2): 现在使用以下命令启动注册表容器: 将第一部分指定为主机端口,将第二部分指定为容器内的端口。 当Docker重新启动时,标志会自动重新启动注册表。

  • void register_modifier(string name, mixed impl) Use this to dynamically register modifier plugin. Pass in the template modifier name, followed by the PHP function that it implements it. 动态注册一个修饰器插件,需要

  • 对于跨网络汇流平台,我们有一个kafka集群在Premise上,另一个在AWS上,其中数据使用mirror Maker从on-prem复制到AWS。这两个集群都独立于它们自己的模式注册表、rest代理和Connect,这两个集群都有不同的生产者和消费者集,并且选择的主题在集群之间被镜像。 部署schema-registry的最佳实践应该是什么?我们是否应该在on-prem和AWS上有一个主服务器(