尝试使用Selenium python命令复制文本,但由于某种原因,它似乎不起作用
这是我的代码:
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'
编辑:
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()
错误:
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'
答案 0 :(得分:2)
您为什么不只使用text
?
emailID = driver.find_element_by_xpath('//*[@id="mail"]')
text_emailID = emailID.text
print(text_emailID)
它似乎隐藏在JS中...所以只需使用Copy
按钮!
emailID = driver.find_element_by_xpath('//*[@id="mail"]')
emailID.click()
copy_btn = driver.find_element_by_xpath('//*[@id="click-to-copy"]')
copy_btn.click()
答案 1 :(得分:2)
您已经发生错误,因为您已导入模块selenium.webdriver.common.keys
。
您应该在该模块中使用Keys
类。
from selenium.webdriver.common.keys import Keys
#...
ActionChains.send_keys(Keys.CONTROL + 'c').perform()
EDIT
它实际上是将文本复制到剪贴板。您可以使用诸如 pyperclip 之类的库来获取文本。
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)
输出
caberisoj@mail-file.net
答案 2 :(得分:2)
在自动测试中切勿依赖剪贴板,这是不安全的。测试必须完全atomic and independent,并且将数据存储在剪贴板中,这意味着您将无法execute your Selenium tests in parallel using i.e. Selenium Grid
也请重新考虑使用您的locator strategy,我建议尽可能通过ID定位元素,因为这是最快,最可靠的方法。
因此,如果您运行以下代码:
driver.get("https://temp-mail.org/en/")
temp_email = driver.find_element_by_id("mail").get_attribute("value")
print(temp_email)
您应该在终端上看到临时电子邮件地址值。