我试图使用If语句检测一个弹出窗口,该弹出窗口并不总是出现,如果找到元素,请单击"不感谢"选项,否则下一个功能
import time
import subprocess
import pyperclip
import pyautogui
import re
import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
serv = Service(r"C:UsersBatmanDesktopDriverchromedriver.exe")
driver = webdriver.Chrome(service=serv)
driver.get("https://www.dell.com/support/home/en-us/product-support/servicetag/0-UG15dVNvUU9sTVVLa2ovUFAvZmh4QT090/overview")
driver.maximize_window
def FeedBack():
#popup asking for feedback
if driver.find_element(By.TAG_NAME,("noButton.buttons")):
driver.find_element(By.TAG_NAME, "noButton.buttons").click()
else:
DriversAndDownloads()
FeedBack()
完整代码
import time
import subprocess
import pyperclip
import pyautogui
import re
import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
serv = Service(r"C:UsersBatmanDesktopBatmanPycharmDellUpdate - seleniumDriverchromedriver.exe")
driver = webdriver.Chrome(service=serv)
driver.get("https://www.dell.com/support")
driver.maximize_window()
def Step1():
SearchBar = driver.find_element(By.NAME, "entry-main-input-home").send_keys("3Q84KQ2")
SearchBarClick = driver.find_element(By.ID,"txtSearchEs").click()
Step1()
def Popup():
#30 second popup
if driver.find_element(By.ID, "sec-overlay"):
time.sleep(30.5)
SearchBarClick = driver.find_element(By.ID, "txtSearchEs").click()
else: FeedBack()
Popup()
def FeedBack():
#popup asking for feedback
if driver.find_element(By.TAG_NAME,("noButton.buttons")):
driver.find_element(By.TAG_NAME, "noButton.buttons").click()
else:
DriversAndDownloads()
FeedBack()
def DriversAndDownloads():
time.sleep(3)
driver.find_element(By.ID, "drivers").click()
DriversAndDownloads()
def FindDrivers():
driver.find_element(By.CSS_SELECTOR, "btn.collapse-toggle.table-collapse-toggle.collapsed").click()
FindDrivers()
上述两个代码之间的区别在于,第一个代码将带您进入弹出窗口"的位置;应该";随机出现。(我测试了几次,它似乎一次也没有从链接直接弹出到那个页面(这是一个很好的方式来播放IF语句
第二个代码是完整的代码(减去获取Dell序列号的功能,我已经提供了一个工作序列号来测试(。
最后一点——我发现我可以添加一个功能来刷新页面(f5(,每次重新加载时都会跳过弹出窗口。唯一的问题是,它不能帮助我根据我想要的结果找出我认为写得正确的代码。
driver.find_element
将抛出异常
您应该使用driver.find_elements
它将返回一个列表。在存在元素的情况下,它将返回一个非空列表,该列表由Python输入为True。否则,它将返回一个由Python解释为布尔False的空列表
所以,不是
if driver.find_element(By.TAG_NAME,("noButton.buttons")):
driver.find_element(By.TAG_NAME, "noButton.buttons").click()
else:
DriversAndDownloads()
尝试使用
if driver.find_elements(By.TAG_NAME,("noButton.buttons")):
driver.find_element(By.TAG_NAME, "noButton.buttons").click()
else:
DriversAndDownloads()
if driver.find_element(By.TAG_NAME,("noButton.buttons"))
在找不到元素的情况下不工作,因为它不返回布尔值True
/False
,而是返回WebElement
实例或NoSuchElementException
。你需要做
if driver.find_elements(By.TAG_NAME,("noButton.buttons")):
# do something
else:
# do something else
或
from selenium.common.exceptions import NoSuchElementException
try:
driver.find_element(By.TAG_NAME,("noButton.buttons"))
# do something
except NoSuchElementException:
# do something else