सेलेनियम पायथन कमांड का उपयोग करके टेक्स्ट कॉपी करने की कोशिश कर रहा है लेकिन किसी कारण से यह काम नहीं कर रहा है

यहाँ मेरा कोड है:

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'
2
XxDanxX 15 सितंबर 2019, 22:41

3 जवाब

सबसे बढ़िया उत्तर

आप केवल 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()
2
DebanjanB 18 सितंबर 2019, 11:34

आपकी त्रुटि हो रही है क्योंकि आपने selenium.webdriver.common.keys मॉड्यूल आयात किया है।

आपको उस मॉड्यूल के भीतर Keys वर्ग का उपयोग करना चाहिए।

from selenium.webdriver.common.keys import Keys

#...

ActionChains.send_keys(Keys.CONTROL + 'c').perform()

संपादित करें

यह वास्तव में टेक्स्ट को क्लिपबोर्ड पर कॉपी कर रहा है। आप टेक्स्ट प्राप्त करने के लिए 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
Bitto Bennichan 15 सितंबर 2019, 23:14

अपने स्वचालित परीक्षणों में कभी भी क्लिपबोर्ड पर भरोसा न करें, यह सुरक्षित नहीं है। परीक्षण पूरी तरह से होने चाहिए परमाणु और स्वतंत्र और यदि आप डेटा को क्लिपबोर्ड में संग्रहीत करते हैं तो इसका अर्थ है कि आप सेलेनियम ग्रिड का उपयोग करके समानांतर में अपने सेलेनियम परीक्षण निष्पादित करें

अपनी लोकेटर रणनीति का उपयोग करने पर भी पुनर्विचार करें, मैं ID जहां संभव हो, क्योंकि यह सबसे तेज़ और सबसे विश्वसनीय तरीका है।

तो यदि आप निम्न कोड चलाते हैं:

driver.get("https://temp-mail.org/en/")
temp_email = driver.find_element_by_id("mail").get_attribute("value")
print(temp_email)

आपको टर्मिनल में अस्थायी ईमेल पता मान देखना चाहिए।

2
Dmitri T 16 सितंबर 2019, 11:07