web剪贴使用python和硒



我在python中使用selenium模块创建了一个小程序。

下面是我的代码:
while True:
try:
btnOptions = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/...."))).click()
firstElement = driver.find_elements(By.XPATH, "//*[text()='Click']")
if not firstElement:
tnTrash = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[text()='Move']"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,
"/html/body/..."))).click()
else:
firstElement.click()
except NoSuchElementException:
break

循环应该做:

步骤1:找到btnotion按钮->btnooptions = WebDriverWait(driver, 10).until(EC.element_to_be_clickable())XPATH,"/html/…"))).click ()

菜单打开,在该菜单中可以有element1或element2;从来不会同时发生这两件事。例如,

element1 is : 
WebDriverWait(driver, 10).until(driver.find_elements(By.XPATH, "//*[text()='element1']"))
element2 is : 
WebDriverWait(driver, 10).until(driver.find_elements(By.XPATH, "//*[text()='element2']"))

步骤2:如果找到元素1,则单击它并在开始处重新开始循环。如果找到的是element2,单击它并在开始处重新开始循环。

如果是要删除的帖子,element1出现在下拉菜单中,如果是个人资料照片,element2出现在下拉菜单中。

只要找到element1,程序就会继续,如果找到的是element2,程序就会停止,并显示一个错误,告诉我没有找到element1

我想过了,但还是不行:

while True:
try:
btnOptions = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div..."))).click()
WebDriverWait(driver, 20).until(driver.find_element(By.XPATH("//*[text()='move to trash']"))).click() or WebDriverWait(driver, 20).until(driver.find_element(By.XPATH("//*[text()='Do not show in profile']"))).click()
except NoSuchElementException:
break

您可以尝试这样做:

try:
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "my_element"))).click()
except:
while True:
try:
btnOptions = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html/body/div["
                             "1]/div/div["
                             "1]/div/div["
                             "5]/div/div/div["
                             "3]/div/div/div["
                             "1]/div["
                             "1]/div/div/div["
                             "4]/div[2]/div/div["
                             "2]/div[3]/div["
                             "3]/div/div/div/div"
                             "/div/div/div/div/div"
                             "/div/div["
                             "8]/div/div/div["
                             "2]/div/div["
                             "3]/div/div")))
time.sleep(2)
btnOptions.click()
time.sleep(2)
btnTrash = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[text()='Déplacer "
                           "dans la corbeille']")))
time.sleep(1)
btnTrash.click()
time.sleep(1)
btn_move = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,
                 "/html/body/div[1]/div/div["
                 "1]/div/div[ "
                 "6]/div/div/div[1]/div/div["
                 "2]/div/div/div/div/div/div/div["
                 "3]/div/div/div/div[1]")))
time.sleep(1)
btn_move.click()
time.sleep(7)
except NoSuchElementException:
break

你试着点击你的元素,如果ok则代码将继续在except块之后,如果点击失败意味着元素不在那里,所以它将运行你预期的代码到except块

验证元素存在的最干净的方法是使用find_elements方法,因为在这种情况下,如果没有找到元素,就不会抛出异常。
你的代码中有几个问题需要改进:

  1. 既然你在这里点击元素,你应该使用element_to_be_clickableexpected_conditions,而不是presence_of_element_located
  2. 当你使用WebDriverWaitexpected_conditions时,不需要在动作之间添加睡眠
    3)你可以直接在返回的web元素对象上执行click(),不需要把它放在临时变量中。
    你的定位器应该改进,但我帮不了你,因为我不知道你在哪个页面上工作。

所以,你的代码可以像这样:

first_element_list = driver.find_elements(By.XPATH,"the_element_locator")
if first_element_list:
first_element_list[0].click()
else:
while True:
try:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/div/div[1]/div/div[5]/div/div/div[3]/div/div/div[1]/div[1]/div/div/div[4]/div[2]/div/div[2]/div[3]/div[3]/div/div/div/div/div/div/div/div/div/div/div[8]/div/div/div[2]/div/div[3]/div/div"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//*[text()='Déplacer dans la corbeille']"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,  "/html/body/div[1]/div/div[1]/div/div[6]/div/div/div[1]/div/div[2]/div/div/div/div/div/div/div[3]/div/div/div/div[1]"))).click()
except NoSuchElementException:
break

最新更新