2017-10-10 107 views
0

我想用硒點擊一些鏈接從網頁的來源。這是我走到這一步:硒不能識別href超文本

import selenium, time 
import html5lib 
from bs4 import BeautifulSoup 
from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.webdriver.common.keys import Keys 
pg_src = br.page_source.encode("utf") 
soup = BeautifulSoup(pg_src) 
br = webdriver.Chrome() 

url = "http://somewikipage.org" 

br.get(url) 

lnkLst = soup.find_all("a", href=re.compile(",_California") # this builds a list with everything in the a href tag 

nuLst = [] 

for i in lnkLst: 

    nuLst.append(i.get('href')) #this removes all the unclickable text from the a href tag 

for i in nuLst: 

    br.find_element_by_link_text(i).click() 

這將導致以下錯誤:

AttributeError: 'list' object has no attribute 'click' 

我打印出來nuLst和每個項目完全HREF標記內的超鏈接匹配。在使用find_element_by_xpath之前,我做了類似的事情,但我不確定如何爲這組hrefs隔離css選擇器,而無需調用頁面上的所有其他hrefs。

+0

我想錯誤來自:br.find_element_by_link_text(i),參數:我是鏈接的url,而不是鏈接的文本。所以你應該將鏈接文本追加到nuLst而不是href:nuLst.append(i.get('href')) – yong

回答

0

AttributeError: 'list' object has no attribute 'click'

您試圖點擊對象列表(沒有點擊方法),而不是點擊web元素列表中的一個web元素。所有鏈接的網頁元素的

先拿到名單

list = driver.find_elements_by_xpath("//a")//Note, there is 'elements' not element 

通過這個列表按您的要求現在迭代。

+1

我得到了使用你的代碼的元素列表,但點擊操作仍然不起作用。我結束了使用for循環,並從迭代構建一個URL,然後使用br.get(url)。這讓我得到了我需要的東西。 – ShaunO

+0

太好了。您可以在我的上述答案中編輯這些內容,並將其標記爲正確,以便對其他人有所幫助。 –