需要使用硒的帮助吗

2024-04-27 19:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想去这个网站: http://www.datiopen.it/it/opendata/Mappa_delle_stazioni_ferroviarie_in_Italia 然后单击“Tabella”选项卡 然后查看表格的第二页(共64页) 然而,我在第一部分失败了,我无法编写代码来单击“Tabella”选项卡

import requests
from selenium import webdriver

    
driver.get('http://www.datiopen.it/it/opendata/Mappa_delle_stazioni_ferroviarie_in_Italia')
element = driver.find_element_by_id("Tabella")
element.click() 

下面是我用来搜索的html代码:

<li id="Tabella" class="Table_img ui-state-default ui-corner-top ui-tabs-selected ui-state-active">
                <span id="span_table_img" class="span_img"></span>
            <a href="#ui-tabs-1" rel="nofollow">Tabella</a>         </li>

谢谢大家


Tags: idhttpuiimgwwwitelementopendata
3条回答

代码有问题

您试图在元素可用/准备在DOM中单击之前单击该元素

解决方案

您需要等待该元素加载并成为可单击的,以便对同一元素执行任何类型的操作

代码

driver = webdriver.Chrome()
driver.get('http://www.datiopen.it/it/opendata/Mappa_delle_stazioni_ferroviarie_in_Italia')


def wait_for_element_to_be_clickable(element):
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, element)))

wait_for_element_to_be_clickable("Tabella")
element = driver.find_element_by_id("Tabella")
element.click()
print("executed")

def wait_for_element_to_be_clickable(element):此方法将等待任何元素变为可单击,然后再继续。(您可以根据页面加载时间增加时间)

在访问表元素之前添加睡眠时间

time.sleep(5)
driver.find_element_by_id('Tabella').click()

要单击Tabella选项卡,您需要诱导WebDriverWait()并等待element_to_be_clickable(),您可以使用以下定位器

链接文本:

driver.get("http://www.datiopen.it/it/opendata/Mappa_delle_stazioni_ferroviarie_in_Italia")    
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.LINK_TEXT,"Tabella"))).click()

XPATH

driver.get("http://www.datiopen.it/it/opendata/Mappa_delle_stazioni_ferroviarie_in_Italia")    
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[text()='Tabella']"))).click()

您需要导入以下库

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

相关问题 更多 >