新手在这里。我已经阅读了一段时间,因为我还是编码新手,但希望您能提供帮助。
我已经完成了一些有关网络抓取的教程/示例,并且正在浏览网站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:“列表”对象没有属性“点击”
答案 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()
点击“俱乐部”链接后的输出:
定位元素的有用链接:https://selenium-python.readthedocs.io/locating-elements.html