无法使用硒点击元素

时间:2019-11-28 16:18:58

标签: python-3.x selenium web-scraping

新手在这里。我已经阅读了一段时间,因为我还是编码新手,但希望您能提供帮助。

我已经完成了一些有关网络抓取的教程/示例,并且正在浏览网站http://enfa.co.uk/

我正在尝试使用chromedriver在Python中使用带有硒的chromedriver打开Chrome实例,然后单击位于网站左侧的名为“俱乐部”的网站上的侧边栏选项之一。

我已导航到需要单击的元素,并在代码中使用了xpath(将鼠标悬停在“ Clubs”链接上,然后复制xpath时,在Chrome开发工具中简单使用了“检查”功能) 。我的代码可以很好地打开chrome(因此Chromedriver和项目的那部分都没有问题),但是我收到一条错误消息,告诉我该对象没有click属性。

我尝试返回该对象,它指出我的列表没有元素(这似乎是问题),但是不确定为什么...我使用的是错误的xpath还是某些网站做出不同的反应,即不会响应像这样的点击请求?

我已经在其他站点上运行了我的代码,以检查我是否在使用点击功能,并且看起来工作正常,所以我对此感到有些困惑。任何帮助都会很棒!

代码:

chromedriver = "/Users/philthomas/Desktop/web/chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.get("http:enfa.co.uk")
button = driver.find_elements_by_xpath("/html/body/table/tbody/tr[5]/td")
button.click()

回溯(最近通话最近):   文件“ sel.py”,第9行,在     button.click() AttributeError:“列表”对象没有属性“点击”

HTML of link I am trying to click

2 个答案:

答案 0 :(得分:0)

button = driver.find_elements_by_xpath("/html/body/table/tbody/tr[5]/td")更改为button = driver.find_element_by_xpath("/html/body/table/tbody/tr[5]/td")

driver.find_elements_by_xpath返回元素的集合,而不是单个元素,因此无法单击它。

您可以找到一些详细信息和示例here

答案 1 :(得分:0)

find_elements_by_xpath返回符合条件的所有Web元素的列表。您必须使用find_element_by_xpath而不是find_elements_by_xpath

此外,页面上还存在iframe,因此您需要先切换到该框架,然后再对其执行任何操作。请找到以下对我来说很好的解决方案。

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

driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")
driver.maximize_window()
driver.get("http:enfa.co.uk")

driver.switch_to.frame(2);
ClubsLink=WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.XPATH, "//span[contains(text(),'Clubs')]")))

ClubsLink.click()

点击“俱乐部”链接后的输出:

enter image description here 定位元素的有用链接:https://selenium-python.readthedocs.io/locating-elements.html