Selenium:如何修复路径选择器

问题描述 投票:0回答:1

我正在使用一个脚本使用 selenium 自动将网站中的名称添加到 .csv,由于某种原因,该脚本在过去几个月工作时不再工作。有点长,但是成功登录了,但是无法访问联系人搜索页面。这是失败的部分:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
import re

# Username and Password
username = "XXXX"
password = "yyyyy"

### Web Driver Setting
### Download new version of ChromeDriver into same folder
driver_path = "C:/Users/owner/Downloads/chromedriver-win64/chromedriver-win64/chromedriver.exe"
chrome_service = ChromeService(executable_path=driver_path)
#options=webdriver.ChromeOptions()
#driver = webdriver.Chrome(service=chrome_service, options=options)
driver = webdriver.Chrome(service=chrome_service)
driver.maximize_window()
driver.implicitly_wait(30)
# driver.get(('https://www.editorialmanager.com/ijrm/default1.aspx'))
driver.get(("https://www.editorialmanager.com/ijrm/default2.aspx"))

sleep(10)
driver.switch_to.default_content()
# FINDING an input:
driver.switch_to.frame(driver.find_element(By.XPATH, '//*[@id="content"]'))
driver.switch_to.frame(
    driver.find_element(By.XPATH, "/html/body/table[2]/tbody/tr/td[2]/iframe")
)
driver.find_element(By.XPATH, '//*[@id="username"]').send_keys(username)
driver.find_element(By.XPATH, '//input[@id="passwordTextbox"]').send_keys(password)

driver.implicitly_wait(10)
driver.find_element(By.XPATH, '//*[@id="emLoginButtonsDiv"]/input[3]').click()
driver.implicitly_wait(10)
sleep(5)

# ### Going to the Search People Page
driver.switch_to.default_content()
driver.switch_to.frame(driver.find_element(By.XPATH, '//*[@id="content"]'))
wait = WebDriverWait(driver, 60)
wait.until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="ctl00_Folders_SearchPeople"]'))
).click()
sleep(3)

我得到的错误是这样的:

Traceback (most recent call last):
  File "C:\Users\owner\Documents\Python\webscrape.py", line 52, in <module>
    wait.until(
  File "C:\Users\owner\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 
Stacktrace:
    GetHandleVerifier [0x00007FF7A8D01502+60802]
    (No symbol) [0x00007FF7A8C7AC02]
    (No symbol) [0x00007FF7A8B37CE4]
    (No symbol) [0x00007FF7A8B86D4D]
    (No symbol) [0x00007FF7A8B86E1C]
    (No symbol) [0x00007FF7A8BCCE37]
    (No symbol) [0x00007FF7A8BAABBF]
    (No symbol) [0x00007FF7A8BCA224]
    (No symbol) [0x00007FF7A8BAA923]
    (No symbol) [0x00007FF7A8B78FEC]
    (No symbol) [0x00007FF7A8B79C21]
    GetHandleVerifier [0x00007FF7A900411D+3217821]
    GetHandleVerifier [0x00007FF7A90460B7+3488055]
    GetHandleVerifier [0x00007FF7A903F03F+3459263]
    GetHandleVerifier [0x00007FF7A8DBB846+823494]
    (No symbol) [0x00007FF7A8C85F9F]
    (No symbol) [0x00007FF7A8C80EC4]
    (No symbol) [0x00007FF7A8C81052]
    (No symbol) [0x00007FF7A8C718A4]
    BaseThreadInitThunk [0x00007FFF23DC257D+29]
    RtlUserThreadStart [0x00007FFF247EAA48+40]

我认为网站的布局发生了变化,我似乎找不到进入联系人搜索的ID,或者替换新的PATH。我该怎么办?

python selenium-webdriver xpath selenium-chromedriver
1个回答
0
投票

看起来您之前在

id
找到的元素的
//*[@id="ctl00_Folders_SearchPeople"]
属性不再存在,因此您在调用
wait.until
时会超时。

正如 @JeffC 所提到的,如果没有任何领域知识/上下文以及对 HTML 源代码的访问,就很难提供超出上述信息的帮助。

如果您可以找到更新的

id
,那么您只需将其替换为下面的代码行即可,

wait.until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="{new-id}"]'))
).click()
© www.soinside.com 2019 - 2024. All rights reserved.