我正在写一个网络抓取脚本,自动登录到我的电子邮件帐户,并发送一条消息。
我已经将代码写到了浏览器单击"new Message“按钮的程度。之后是一个新窗口(还是新框架?)打开可以键入收件人地址、主题和邮件的地方。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
myPassword = 'xxxxxxxxxxxxxxxx'
browser = webdriver.Firefox() # Opens Firefox webbrowser
browser.get('https://protonmail.com/') # Go to protonmail website
loginButton = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.btn-ghost:nth-child(1)")))
loginButton.click()
usernameElem = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#username")))
usernameElem.send_keys("first.last@protonmail.com")
passwordElem = browser.find_element_by_css_selector("#password")
passwordElem.send_keys(myPassword)
anmeldenButton = browser.find_element_by_css_selector(".button")
anmeldenButton.click()
newMessage = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/div[3]/div/div/div[1]/div[2]/button")))
newMessage.click()
addressElem = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#to-composer-1591")))
addressElem.send_keys('first.last@mail.com')在下面的第一行中,我得到一个TimeoutException错误:
addressElem = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#to-composer-1591")))
addressElem.send_keys('asdf')我认为会发生错误,因为浏览器不知道在哪里找到元素,对吗?
“新消息”按钮的源代码如下所示:
<button class="button button-large button-solid-norm text-bold mt0-25 w100 no-mobile" aria-busy="false" type="button" data-testid="sidebar:compose" aria-describedby="tooltip-8">Neue Nachricht</button>

新窗口或框架的源代码:
<span class="flex-item-fluid p0-5 pr1 pl0-75 text-ellipsis user-select-none cursor-move">Neue Nachricht</span>

我不确定我是否走上了解决这个问题的正确道路。我试图在源代码中找到信息,这有助于浏览器找到正确的元素,并使用.switch_to_window()或.switch_to_frame()方法。首先,我不确定,切换到一个新的窗口或框架是否真的是一个问题(我真的不知道它们之间的区别)。第二:如何实现切换到新元素,以便浏览器可以应用.send_keys()方法?
发布于 2022-01-23 11:35:48
我看了看HTMLDOM,没有看到任何iframe或窗户被打开。
无法与输入字段交互的原因是因为您正在使用这个CSS选择器#to-composer-1591最后一部分1591是动态的,这意味着它将在每个新的浏览器实例上发生变化。
修复:您应该使用整个HTMLDOM中唯一的input[id^='to-composer']。
addressElem = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id^='to-composer']")))
addressElem.send_keys('first.last@mail.com')https://stackoverflow.com/questions/70821234
复制相似问题