我正在使用一个脚本使用 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。我该怎么办?
看起来您之前在
id
找到的元素的 //*[@id="ctl00_Folders_SearchPeople"]
属性不再存在,因此您在调用 wait.until
时会超时。
正如 @JeffC 所提到的,如果没有任何领域知识/上下文以及对 HTML 源代码的访问,就很难提供超出上述信息的帮助。
如果您可以找到更新的
id
,那么您只需将其替换为下面的代码行即可,
wait.until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="{new-id}"]'))
).click()