硒中剪贴板的按钮

时间:2018-12-26 20:22:03

标签: python selenium selenium-webdriver

我希望使用Selenium Webdriver抓取从站点生成的hashtags。由于该网站使用的是Shadow Content (User Agent),所以我决定仅使用该网站中已有的按钮将hashtags复制到其上即可。但是,我找不到<button>

这是HTML

<button type="button" id="copyBtn" data-clipboard-target="#hashtag_textarea" class="btn btn-success">Copy to clipboard</button>

Selenium找不到按钮的方式如何。我在做什么错了。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait as wait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome('/Users/user/Documents/docs/chromedriver')
browser.get('https://seekmetrics.com/hashtag-generator')
delay = 15
print ("Headless Chrome Initialized")
print ("\n")

try:
    element = wait(browser, delay).until(EC.element_to_be_clickable((By.CLASS_NAME, 'el-input__inner')))
    element.click()
    element.send_keys('love')
    element.send_keys(Keys.ENTER)
    wait(browser, delay)
    browser.find_element_by_id('copyBtn').click()
    print('Page is ready!')
    # print(hashtags.text)
    # print (browser.page_source)
except TimeoutException:
    print("Loading took too much time!")

browser.quit()

2 个答案:

答案 0 :(得分:1)

您无需单击按钮即可获得文本区域value,但需要等到textarea找到。

element.send_keys('love')
element.send_keys(Keys.ENTER)
# wait until hashtags generated
hashtags = wait(browser, delay).until(EC.presence_of_element_located((By.ID, 'hashtag_textarea')))
print(hashtags.get_attribute('value'))
print('Page is ready!')

答案 1 :(得分:1)

在文本框页面中输入的值刷新后,在这段时间内您的代码尝试单击不可单击的按钮或说未加载到DOM中,这需要花费一些时间。而是等待按钮直到可点击为止,请检查以下代码示例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait as wait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome('C:\Python27\Scripts\chromedriver')
browser.get('https://seekmetrics.com/hashtag-generator')
delay = 15
print ("Headless Chrome Initialized")
print ("\n")

try:
    element = wait(browser, delay).until(EC.element_to_be_clickable((By.CLASS_NAME, 'el-input__inner')))
    element.click()
    element.send_keys('love')
    element.send_keys(Keys.ENTER)
    wait(browser, delay)
    button = wait(browser, delay).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Copy to clipboard']")))
    button.click()
    print('Page is ready!')
    # print(hashtags.text)
    # print (browser.page_source)
except TimeoutException:
    print("Loading took too much time!")

browser.quit()

希望这对您有帮助。