Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在元素中选择文本,复制它,然后将其粘贴到页面的其他位置?Selenium-webdriver-python;_Python_Selenium_Selenium Webdriver_Webdriver_Selenium Chromedriver - Fatal编程技术网

如何在元素中选择文本,复制它,然后将其粘贴到页面的其他位置?Selenium-webdriver-python;

如何在元素中选择文本,复制它,然后将其粘贴到页面的其他位置?Selenium-webdriver-python;,python,selenium,selenium-webdriver,webdriver,selenium-chromedriver,Python,Selenium,Selenium Webdriver,Webdriver,Selenium Chromedriver,[编辑图片][1] [网址连结][2] [图片一][3] [图片二][4] 因此,这是一个论坛,客户发布问题,寻求答案。问题由第一张海报的客户提出。我要做的是找到第一张海报的名字文本,在本例中是用户davidbrigden,然后复制他们的名字。接下来,在按下第二个ss中显示的回复后,我想将我从回复框中的第一张海报复制的姓名粘贴到回复框中,让他们知道我是专门回复他们的。然而,我目前还不知道如何做到这一点。谢谢你的帮助 选择回复选项的我的代码: reply_buttons = driver.find

[编辑图片][1]

[网址连结][2]

[图片一][3]

[图片二][4]

因此,这是一个论坛,客户发布问题,寻求答案。问题由第一张海报的客户提出。我要做的是找到第一张海报的名字文本,在本例中是用户davidbrigden,然后复制他们的名字。接下来,在按下第二个ss中显示的回复后,我想将我从回复框中的第一张海报复制的姓名粘贴到回复框中,让他们知道我是专门回复他们的。然而,我目前还不知道如何做到这一点。谢谢你的帮助

选择回复选项的我的代码:

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

您可以获得页面上所有用户的姓名,如下所示:

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])

您可以使用此css_选择器从帖子标题中查找用户的用户名:

'.PostUser .username'
因此,您可以获得所有帖子的用户名,如下所示

answer_names= driver.find_elements_by_css_selector('.PostUser .username')
第一个回答的用户名是

first_answer_user_name = answer_names[0].text
replay comment textarea元素通过以下css_选择器定位

`#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)
不要忘记添加等待/延迟。
我添加sleep是为了简化,应该使用预期条件,而不是复制粘贴,似乎最好抓取此文本,将其存储在变量中,然后将其发送到您回复的字段。正如我们前面讨论的,您在登录站点时执行此操作。在这种情况下,通过按“回复”按钮,重播评论对话框将从用户名开始打开@Prophet不幸的是,这似乎不起作用,尽管您选择了回复选项并使用了您之前建议的代码,但它忽略了@Username,只显示了一个空的回复框。我最初还认为它会自动回复用户名,这似乎只是在您手动按下回复按钮时才会出现,而不是在selenium为您执行此操作时。为了克服这一点,我的目标是复制和粘贴原来的海报的名字在回复框一旦按下。奇怪。。。好的,我试着给你一个简短的解决方案。我似乎得到了这个错误:reply\u field\u元素。send\u keysnames[0]name错误:name'reply\u field\u element'没有定义。我的代码到目前为止看起来是这样的:elements=driver。find\u elements\u by\u css\u selector'。postasser-badges.badges'names=[]对于元素中的元素:names.appendelement.text reply_buttons=driver。通过_xpath“//button[@title=reply]”查找元素回复按钮[0]。单击回复字段元素。发送键名称[0]您需要用回复字段中的任何元素替换回复字段元素。你必须登录才能回复,所以我看不到回复字段来帮助你。这很有帮助,但是你能展示一下这些代码是如何组合在一起的吗?我有点困惑。还有行:driver.find\u elements\u by\u css\u selector或composer textareasend\u keys first\u answer\u user\u name,由于存在语法错误而返回,即使在调整代码后,也不会写出第一个用户名。我觉得我遗漏了一些东西。这似乎有道理,谢谢。但是,行:driver.find_elements_by_css_selector'composer textarea'send_keys first_answer_user_name导致无效语法,send_keys中的s突出显示,我已更新了我的原始帖子以显示代码的屏幕截图。当然,这是我的复制粘贴错误。它应该是通过css选择器查找元素,而不是通过css选择器查找元素