无法单击表中的链接

时间:2018-04-21 21:17:30

标签: selenium web-crawler selenium-chromedriver

这是我的代码(在Python中):

driver=webdriver.Chrome('/Users/Documents/chromedriver')
driver.get('http://comprasnet.gov.br/acesso.asp?url=/livre/Pregao/ata0.asp')

#FIRST PAGE
driver.switch_to.frame('main2')
driver.find_element_by_name('dt_ini_sessao').send_keys('18/04/2018')
driver.find_element_by_name('dt_fim_sessao').send_keys('18/04/2018')
driver.find_element_by_name('ok').click()

直到这里很好,代码运行顺利。但是当我到达第二页时,我无法点击我想要的链接。

#SECOND PAGE
driver.find_element_by_xpath('//html/body/table[1]/tbody/tr/td[2]/table[2]/tbody/tr[6]/td[1]/a').click()

enter image description here

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可以使用find_elements_by_tag_name代替。它将为您提供包含.click方法的标记a的填充列表。

以下是工作代码示例。

from selenium import webdriver

driver=webdriver.Chrome()
driver.get('http://comprasnet.gov.br/acesso.asp?url=/livre/Pregao/ata0.asp')

#FIRST PAGE
driver.switch_to.frame('main2')
driver.find_element_by_name('dt_ini_sessao').send_keys('18/04/2018')
driver.find_element_by_name('dt_fim_sessao').send_keys('18/04/2018')
driver.find_element_by_name('ok').click()
for elem in driver.find_elements_by_tag_name('a') :
    if elem.text == "3112017" :
        elem.click()

答案 1 :(得分:1)

如果要遍历第二页上第一个表格行的所有链接,可以使用以下代码:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome('/Users/Documents/chromedriver')
driver.get('http://comprasnet.gov.br/acesso.asp?url=/livre/Pregao/ata0.asp')

#FIRST PAGE
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_name("main2")))
driver.find_element_by_name('dt_ini_sessao').send_keys('18/04/2018')
driver.find_element_by_name('dt_fim_sessao').send_keys('18/04/2018')
driver.find_element_by_name('ok').click()

#SECOND PAGE
links = [link.get_attribute("href") for link in WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//td[1]/a")))]

for link in links:
    driver.get(link)
    # Do something on each page

#SECOND PAGE
links_count = len(WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//td[1]/a"))))

for index in range(links_count):
    WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//td[1]/a")))[index].click()
    # Do something on each page
    driver.get('http://comprasnet.gov.br/acesso.asp?url=/livre/Pregao/ata0.asp')
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_name("main2")))
    driver.find_element_by_name('dt_ini_sessao').send_keys('18/04/2018')
    driver.find_element_by_name('dt_fim_sessao').send_keys('18/04/2018')
    driver.find_element_by_name('ok').click()