我的 python 脚本找不到使用 Selenium 单击的链接。我该如何解决它?

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

我有一个脚本,可以从网站上抓取联系人并将其发送到 csv 文件。唯一的问题是,一旦进入站点并登录,即使我指定了链接ID,它也无法找到要单击的链接ID。我在指定查找链接的行中收到超时错误。我该如何解决它?

登录并搜索按钮的脚本部分:

### 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()
driver.maximize_window()
driver.implicitly_wait(30)
# driver.get(('https://www.editorialmanager.com/ijrm/default1.aspx'))
driver.get(("https://www.editorialmanager.com/ijrm/default1.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"]'))
wait.until(EC.visibility_of_element_located((By.ID, 'lnkSearchPeople')))
wait.until(EC.element_to_be_clickable((By.ID, 'lnkSearchPeople'))).click()
sleep(3)

HTML 检查器中显示的按钮: HTML image

python selenium-webdriver web-scraping
1个回答
0
投票

您的定位器不正确。在 HTML 中,它显示属性 link-id 而不是 id。 所以 By.ID 在这里不起作用。

使用 CSS 或 xpath 选择器

(By.XPATH,//*[@link-id = 'lnkSearchPeople'])
(By.CSS,[link-id = 'lnkSearchPeople'])
© www.soinside.com 2019 - 2024. All rights reserved.