在python中使用selenium send_keys复制文本

2 人关注

试图使用Selenium python命令复制文本,但由于某些原因,似乎没有成功。

Here is my code:

driver.get('https://temp-mail.org/en/') #opens the website
emailID = driver.find_element_by_xpath('//*[@id="mail"]') #find the email ID
ActionChains = ActionChains(driver)
ActionChains.double_click(emailID).perform()
ActionChains.send_keys(keys.CONTROL + 'c').perform()
ActionChains.send_keys(keys.CONTROL + 'c').perform()

我也曾试过。

emailID.send_keys(keys.CONTROL + 'c')

但似乎不断收到这个错误。

module 'selenium.webdriver.common.keys' has no attribute 'CONTROL'

EDIT:

driver.get('https://google.com ') #opens the website
input = driver.find_element_by_xpath('//*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input')
ActionChains.send_keys(Keys.CONTROL + 'v').perform()

Error:

Traceback (most recent call last):
  File "C:/Users/Shadow/PycharmProjects/untitled1/venv/Test.py", line 28, in <module>
    ActionChains.send_keys(Keys.CONTROL + 'v').perform()
  File "C:\Users\Shadow\PycharmProjects\untitled1\venv\lib\site-packages\selenium\webdriver\common\action_chains.py", line 336, in send_keys
    if self._driver.w3c:
AttributeError: 'str' object has no attribute '_driver'
    
3 个评论
尝试 from selenium.webdriver.common.keys import Keys 。【替换代码1不要忘记字母的大小写
应该发布一个完整的工作实例。我相信它应该 keys.Keys.CONTROL
Dan
从selenium.webdriver.common.keys中导入Keys后,问题得到了解决。然而,尽管代码运行时没有错误,但由于某些原因,似乎没有复制文本
python
selenium
Dan
Dan
发布于 2019-09-16
3 个回答
Bitto Bennichan
Bitto Bennichan
发布于 2019-09-16
已采纳
0 人赞同

你的错误发生了,因为你导入了模块 selenium.webdriver.common.keys

你应该在该模块中使用 Keys 类。

from selenium.webdriver.common.keys import Keys
ActionChains.send_keys(Keys.CONTROL + 'c').perform()

它实际上是将文本复制到剪贴板。你可以使用一个库,如pyperclip to get the text.

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import pyperclip
driver = Chrome('drivers/chromedriver')
driver.get('https://temp-mail.org/en/')
emailID = driver.find_element_by_xpath('//*[@id="mail"]') 
ActionChains = ActionChains(driver)
ActionChains.double_click(emailID).perform()
ActionChains.send_keys(Keys.CONTROL + 'c').perform()
text = pyperclip.paste()
print(text)

Output

caberisoj@mail-file.net
    
Dan
我已经删除了selenium.webdriver.common.keys,而是从selenium.webdriver.common.keys导入keys模块 - 但现在我得到了这个错误:不能从'selenium.webdriver.common.keys导入名称'keys'。
@XxDanxX 这是 Keys ,大写的K。
Dan
OMG,非常感谢你,伙计!我不相信一件简单的事情会导致这样的错误,谢谢我现在遇到的情况是,它似乎不能复制文本--我运行程序,让它复制,然后我停止程序,试着粘贴它,但它不能粘贴该文本。
Dan
谢谢。然而,我似乎得到了一个错误,说 "没有名为'pyperclip'的模块",尽管我已经导入了它。
很好的回答@XxDanxX 确保你没有任何名为pyperclip的文件夹......那会搞乱导入......(在我的回答中我只是用了 Copy 这个按钮......)。
Moshe Slavin
Moshe Slavin
发布于 2019-09-16
0 人赞同

why don't you just use text ?

emailID = driver.find_element_by_xpath('//*[@id="mail"]')
text_emailID = emailID.text
print(text_emailID)

Update

It seems to be hidden in the JS... so just use the Copy button!

emailID = driver.find_element_by_xpath('//*[@id="mail"]')
emailID.click()
copy_btn = driver.find_element_by_xpath('//*[@id="click-to-copy"]')
copy_btn.click()
    
Dan
这似乎不起作用--我运行代码,没有错误,但它没有打印任何东西出来
Dmitri T
Dmitri T
发布于 2019-09-16
0 人赞同

千万不要在你的自动化测试中依赖剪贴板,这是不安全的。测试必须是完全 原子和独立 而鉴于你将数据存储在剪贴板中,这意味着你将无法 使用Selenium Grid平行地执行你的Selenium测试。

同时重新考虑使用你的 定位器战略 ,我建议通过以下方式定位元素 ID 在可能的情况下,这是最快速和最可靠的方式。

So if you run the following code:

driver.get("https://temp-mail.org/en/")