Используя python и селен, как я могу получить значение заполнителя, где значение не UTF-8? - PullRequest
1 голос
/ 22 апреля 2020

Я пытался получить адрес электронной почты и нажать на кнопку refre sh на следующем снимке экрана. Но я получаю ошибки.

enter image description here

Мой код для этого выглядит следующим образом:

from selenium import webdriver
url = 'http://od.obagg.com/ '

driver = webdriver.Chrome(executable_path='chromedriver')
driver.get(url)

s = driver.find_element_by_id('//*[@id="shortid"]').get_attribute('placeholder')
print(s)

Основываясь на проверке, я пытался сделать и перепробовал много способов получить значение этого поля электронной почты и нажать кнопку refre sh. Но все равно не повезло.

Кто-нибудь знает какие-нибудь хитрости, которыми можно поделиться?

1 Ответ

1 голос
/ 22 апреля 2020

Это может быть связано с тем, что элемент отключен, также, find_element_by_id('//*[@id="shortid"]') неверно. Это может быть:

  • find_element_by_xpath('//*[@id="shortid"]')
  • find_element_by_id("shortid")?

У меня работает следующее:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome(executable_path='chromedriver')
driver.maximize_window()
driver.get('http://od.obagg.com/')
wait = WebDriverWait(driver, 10)
el = wait.until(ec.visibility_of_element_located((By.ID, "shortid")))
placeholder = el.get_attribute("placeholder")
email = el.get_attribute('value')
print(placeholder, email)
# 请等待分配临时邮箱 -_ylp06tc@xxx.xxx

Если вам нужно 10 разных писем, вы можете использовать:

from time import sleep
for x in range(10):
    driver.find_element_by_id("refreshShortid").click()
    sleep(0.15) # you may have to increase this value to give enough time to generate the new email
    new_email = driver.find_element_by_id("shortid").get_attribute('value')
    print(new_email)
...