我正在尝试使用我当前正在编码的“Instagram 机器人”登录 Instagram。我已经通过了登录屏幕、“获取应用程序”屏幕以及它想要如何打开通知。两个选项是“打开”和“现在不打开”。我试图使用与以前相同的方法来单击“现在不”,但它不起作用。代码(在 Firefox 上使用检查元素)说
<button class="aOOlW HoLwm " tabindex="0">Not Now</button>
我尝试使用类代码
notNowButton = driver.find_element_by_xpath("//a[@class='aOOlW HoLwm']")
# or
notNowButton = driver.find_element_by_xpath("//a[@tabindex='0']")
但这也行不通。有什么帮助吗?
通知:
使用
WebDriverWait
和 Xpath 匹配文本 Not Now
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
notNowButton = WebDriverWait(driver, 15).until(
lambda d: d.find_element_by_xpath('//button[text()="Not Now"]')
)
notNowButton .click()
所以这在某种程度上对我有用。我已经测试了大约10次,但这可能不是最好的方法。
#we just set a simple sleep time.it's not complicated we just wait for 5 seconds to make sure the page is fully loaded
sleep(5)
#since it's a button we just write //button and then it has to search for the described class which in this scenario it is aOOlW HoLwm and then it just clicks on it
not_now_notif=browser.find_element_by_xpath("//button[@class='aOOlW HoLwm ']")
not_now_notif.click()
顺便说一句,你可以在这里查看。我相信这也可能有帮助 https://www.edureka.co/community/575/need-wait-until-page-completely-loaded-selenium-webdriver
看来你们已经很接近了。
在您的第一次代码试用中:
driver.find_element_by_xpath("//a[@class='aOOlW HoLwm']")
<tag>
不是<a>
标签,而是<button>
标签。因此,按以下方式更改它会起作用。
driver.find_element_by_xpath("//button[@class='aOOlW HoLwm ']")
现在所需的元素是JavaScript启用的元素,因此您必须诱导WebDriverWait才能使元素可点击,并且以下行将完美工作:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='aOOlW HoLwm ']"))).click()
作为替代方案,您也可以使用 cssSelector,如下所示:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.aOOlW.HoLwm"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome('/Users/username/Documents/WebDriver/chromedriver')
browser.find_elements_by_xpath("//button[contains(text(), 'Not Now')]")[0].click()
您必须首先使用复制CSS选择器来复制路径
Notnow = driver.find_element_by_css_selector("body > div.RnEpo.Yx5HN > div > div > div.mt3GC > button.aOOlW.HoLwm")
Notnow.click()
首先,通过文本找到元素并将其分配给
not_now_button
:
not_now_button = driver.find_element_by_xpath("//*[text()='Not Now']")
然后点击按钮:
not_now_button.click()
driver = webdriver.Chrome(chrome_options)
driver.get("https://www.instagram.com/")
time.sleep(2)
email_enter = driver.find_element(By.CSS_SELECTOR, "input[aria-
label='Phone number, username or email address']")
email_enter.send_keys(os.getenv("email"))
password_enter = driver.find_element(By.CSS_SELECTOR, "input[aria-
label='Password']")
password_enter.send_keys(os.getenv("password"))
time.sleep(2)
log_in = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
log_in.click()
time.sleep(5)
not_now = driver.find_element(By.CSS_SELECTOR,"div[role='button']")
not_now.click()