如果它不是 True,如何跳过 WebDriverWait?
How to skip WebDriverWait if it is not True?
英语有点差。我只是在制作一个简单的 Instagram 机器人,它首先从 txt 文件中获取用户名和密码并将其用于登录网站,但是 "Turn on Notification" 仅在第一次登录时弹出。每当机器人使用第二个帐户登录时,它都不会弹出。如果找不到任何元素,我希望我的 WebdriverWait 忽略。如果 "Turn on Notification" 没有在其他帐户中弹出,我希望它忽略。
我用于删除打开通知弹出窗口的代码:
pop_up = ui.WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click() # Remove notification
sleep(4)
我的全部代码:
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from getpass import getpass
from selenium.webdriver.support import ui
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# Create a list of username, password pairs from your file.
username_password_list = list()
with open("C:\Users\user\AppData\Roaming\JetBrains\PyCharmCE2020.1\scratches\detail.txt") as file:
for line in file:
user, password = line.split(':')
username_password_list.append((user, password))
browser = webdriver.Firefox() # Runs Firefox.
browser.implicitly_wait(5)
browser.get('https://www.instagram.com/') # Web address to load.
for user, password in username_password_list:
class Main:
username_input = browser.find_element_by_css_selector('input[name="username"]') # Finds username field.
password_input = browser.find_element_by_css_selector('input[name="password"]') # Finds password field.
username_input.send_keys(user) # Input username.
password_input.send_keys(password) # Input password.
login_button = browser.find_element_by_xpath('//button[@type="submit"]') # Finds login button.
login_button.click() # Click login button.
pop_up = ui.WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click() # Remove notification.
sleep(4)
class SearchBar:
Search = browser.find_element_by_xpath('//input[contains(@class, "XTCLo x3qfX")]') # Find search bar.
Search.send_keys("Any_Username") # Input.
browser.find_element_by_class_name("yCE8d").click() # Search.
sleep(5)
browser.find_element_by_xpath('//span[@class="vBF20 _1OSdk"]').click() # Finds follow button and click.
sleep(5)
class Logout:
browser.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[3]/div/div[5]').click() # Go to profile.
sleep(5)
browser.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/div[1]/div/button').click() # Click settings.
sleep(5)
browser.find_element_by_xpath('/html/body/div[4]/div/div/div/button[9]').click() # Click logout.
sleep(5)
browser.close()
你可以用 try/except
块来做到这一点:
try:
ui.WebDriverWait(browser, 10).until(EC.visibility_of_element_located(
(By.CSS_SELECTOR, ".piCib")))
ui.WebDriverWait(browser, 5).until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click()
except:
pass
except
块将在没有弹出窗口的 5 秒超时后执行。
希望对你有帮助!
英语有点差。我只是在制作一个简单的 Instagram 机器人,它首先从 txt 文件中获取用户名和密码并将其用于登录网站,但是 "Turn on Notification" 仅在第一次登录时弹出。每当机器人使用第二个帐户登录时,它都不会弹出。如果找不到任何元素,我希望我的 WebdriverWait 忽略。如果 "Turn on Notification" 没有在其他帐户中弹出,我希望它忽略。
我用于删除打开通知弹出窗口的代码:
pop_up = ui.WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click() # Remove notification
sleep(4)
我的全部代码:
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from getpass import getpass
from selenium.webdriver.support import ui
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# Create a list of username, password pairs from your file.
username_password_list = list()
with open("C:\Users\user\AppData\Roaming\JetBrains\PyCharmCE2020.1\scratches\detail.txt") as file:
for line in file:
user, password = line.split(':')
username_password_list.append((user, password))
browser = webdriver.Firefox() # Runs Firefox.
browser.implicitly_wait(5)
browser.get('https://www.instagram.com/') # Web address to load.
for user, password in username_password_list:
class Main:
username_input = browser.find_element_by_css_selector('input[name="username"]') # Finds username field.
password_input = browser.find_element_by_css_selector('input[name="password"]') # Finds password field.
username_input.send_keys(user) # Input username.
password_input.send_keys(password) # Input password.
login_button = browser.find_element_by_xpath('//button[@type="submit"]') # Finds login button.
login_button.click() # Click login button.
pop_up = ui.WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click() # Remove notification.
sleep(4)
class SearchBar:
Search = browser.find_element_by_xpath('//input[contains(@class, "XTCLo x3qfX")]') # Find search bar.
Search.send_keys("Any_Username") # Input.
browser.find_element_by_class_name("yCE8d").click() # Search.
sleep(5)
browser.find_element_by_xpath('//span[@class="vBF20 _1OSdk"]').click() # Finds follow button and click.
sleep(5)
class Logout:
browser.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[3]/div/div[5]').click() # Go to profile.
sleep(5)
browser.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/div[1]/div/button').click() # Click settings.
sleep(5)
browser.find_element_by_xpath('/html/body/div[4]/div/div/div/button[9]').click() # Click logout.
sleep(5)
browser.close()
你可以用 try/except
块来做到这一点:
try:
ui.WebDriverWait(browser, 10).until(EC.visibility_of_element_located(
(By.CSS_SELECTOR, ".piCib")))
ui.WebDriverWait(browser, 5).until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, ".aOOlW.HoLwm"))).click()
except:
pass
except
块将在没有弹出窗口的 5 秒超时后执行。
希望对你有帮助!