【问题标题】:How can I select the text within an element, copy it and then paste it elsewhere on the page? Selenium webdriver python;如何选择元素中的文本,复制它,然后将其粘贴到页面的其他位置? Selenium webdriver python;
【发布时间】:2021-05-31 14:49:12
【问题描述】:

[编辑图片][1]

[网站链接][2]

[图 1][3]

[图 2][4]

因此,这是一个客户发布问题以寻求答案的论坛。这个问题是由第一张海报的顾客提出的。我要做的是找到第一张海报的名字文本,在这种情况下是用户“davidbrigden”,然后复制他们的名字。接下来,在按下回复后(显示在第二个 ss 中),我想将我从第一张海报中复制的名字粘贴到回复框中,让他们知道我正在专门回复他们。但是,我目前无法弄清楚如何做到这一点。帮助表示赞赏。

我选择回复选项的代码:

reply_buttons = driver.find_elements_by_xpath('//button[@title="Reply"]')
reply_buttons[0].click()

【问题讨论】:

  • 与其复制粘贴,不如抓取该文本,将其存储在变量中,然后将其发送到您回复的字段。
  • 正如我们之前讨论过的,当您已经登录到该站点时,您正在执行此操作。在这种情况下,通过按下回复按钮,将打开以用户名开头的重播评论对话框。 ibb.co/Nr9sQ4H
  • @Prophet 不幸的是,这似乎不起作用,尽管选择了回复选项(​​使用您之前建议的代码)它忽略了“@Username”并且只显示一个空的回复框。我最初还认为它会自动回复用户名,这似乎只是当你手动按下回复按钮而不是 selenium 为你做的时候。为了克服这个问题,我的目标是在按下后将原始发帖人的姓名复制并粘贴到回复框中。
  • 奇怪...好的,稍后会尝试为您提供解决方案

标签: python selenium selenium-webdriver webdriver selenium-chromedriver


【解决方案1】:

您可以使用此 css_selector 从帖子标题中找到用户的用户名:

'.PostUser .username'

所以,你可以得到所有的帖子用户名如下

answer_names= driver.find_elements_by_css_selector('.PostUser .username')

第一个回答的用户名是

first_answer_user_name = answer_names[0].text

重播评论textarea元素通过css_selector定位

`#composer textarea`

因此,您可以通过以下方式发送文本:

driver.find_element_by_css_selector('#composer textarea').send_keys(first_answer_user_name)

UPD:
总而言之,它将如下所示:

time.sleep(5)
answer_names= driver.find_elements_by_css_selector('.PostUser .username')
first_answer_user_name = answer_names[0].text
reply_buttons = driver.find_elements_by_xpath('//button[@title="Reply"]')
reply_buttons[0].click()
time.sleep(3)
driver.find_element_by_css_selector('#composer textarea').send_keys(first_answer_user_name)

不要忘记添加等待/延迟。
为了简化,我添加了 sleeps,应该使用预期的条件来代替

【讨论】:

  • 这很有帮助,但你能展示一下这一切看起来像一堆代码吗?我有点困惑。还有一行: driver.find_elements_by_css_selector(#composer textarea)send_keys(first_answer_user_name) ,由于 # 存在而返回语法错误,即使在调整代码后第一个用户的名字也没有写出。我觉得我缺少一些东西。
  • 这似乎有道理,谢谢。但是,行: driver.find_elements_by_css_selector('#composer textarea')send_keys(first_answer_user_name) 导致语法无效,并且 send_keys 中的“s”被突出显示,我已经更新了我的原始帖子以显示代码的屏幕截图。
  • 当然,这是我的复制粘贴错误。它应该是find_element_by_css_selector,而不是find_elements_by_css_selector
【解决方案2】:

你可以像这样获取页面上所有用户的名字:

elements = driver.find_elements_by_css_selector('.PostUser-badges.badges')
names = []
for element in elements:
    names.append(element.text)

那么如果你想用“davidbrigden”名字回复,使用

reply_field_element.send_keys(names[0])

【讨论】:

  • 我似乎收到了这个错误:reply_field_element.send_keys(names[0]) NameError: name 'reply_field_element' is not defined
  • 我的代码到目前为止看起来像这样:elements = driver.find_elements_by_css_selector('.PostUser-badges.badges') names = [] for element in elements: names.append(element.text) reply_buttons = driver.find_elements_by_xpath('//button[@title="Reply"]') reply_buttons[0].click() reply_field_element.send_keys(names[0])
  • 您需要将reply_field_element 替换为回复字段所在的位置。您必须登录才能回复,所以我看不到回复字段来帮助您。
猜你喜欢
  • 2014-10-22
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 2018-06-10
  • 1970-01-01
相关资源
最近更新 更多