2017-08-05 72 views
1

我想单击通过硒谷歌图片搜索“显示更多结果”按钮。我怎样才能通过硒点击这个按钮,它总是说列表对象没有属性'点击'

的页面是https://www.google.co.jp/search?q=circle&source=lnms&tbm=isch&sa=X&ved=0ahUKEwifxd-wqr_VAhXEopQKHQpSB_AQ_AUICigB&biw=1249&bih=927

的页面应该是4次向下滚动,这样就可以看到按钮。

的HTML代码: enter image description here

我的代码如下

from selenium import webdriver 
import time 

class ImgCrawler: 
    def __init__(self,searchlink = None): 
     self.link = searchlink 
     self.soupheader = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3176.2 Safari/537.36"} 
     self.scrolldown = None 
     self.jsdriver = None 

    def getChromeCanary(self): 
     self.jsdriver = webdriver.Chrome("f:\software\python\chromedriver_win32\chromedriver.exe") 
     self.jsdriver.implicitly_wait(30) 
     self.jsdriver.get(self.link) 

    def scrollDownUseChromeCanary(self, scrolltimes = 1, sleeptime = 10): 
     for i in range(scrolltimes): 
      self.jsdriver.execute_script('window.scrollTo(0,document.body.scrollHeight);') 
      time.sleep(sleeptime) 

    def clickNextPage(self): 
     return self.jsdriver.find_elements_by_css_selector("input.ksb._kvc").click() 


if __name__ == '__main__': 
    weblink = "https://www.google.com.hk/search?hl=en&site=imghp&tbm=isch&source=hp&biw=1461&bih=950&q=circle&oq=circle&gs_l=img.3..0l10.1497.3829.0.4548.10.9.1.0.0.0.185.1136.0j7.7.0....0...1.1.64.img..2.7.974...0i10k1.4YZkQiWXzGo" 
    img = ImgCrawler(weblink) 
    img.getChromeCanary() 
    img.scrollDownUseChromeCanary(4,5) 
    img.clickNextPage() 

回答

2

您需要将您的查询的第一个元素:

self.jsdriver.find_elements_by_css_selector("input.ksb._kvc")[0].click() 

http://selenium-python.readthedocs.io/locating-elements.html

要找到多个元素(这些方法会返回一个列表):

+0

为什么更换

self.jsdriver.find_elements_by_css_selector("input.ksb._kvc").click() 

?只有一个按钮。 –

+0

'find_elements_by_css_selector'总是返回所有匹配元素的列表,对于一个或几百个,甚至0个都会给出一个空列表 – PRMoureu

+0

虽然,您说得对,谢谢!有用。但我不明白。我搜索网页源代码。只有一个地方匹配“input.ksb._kvc”。为什么它回报很多? –

1

find_elements_...()方法通常用于

  • 得到的WebElements列表,通过它下面的迭代:

    [element.text for element in driver.find_elements_by_tag_name('a')] 
    
  • 如果没有唯一标识符,则按索引定位元素:

    driver.find_elements_by_class_name('some_class_name')[1] 
    

在其他情况下,你可以简单地使用find_element_...()方法返回一个WebElement

尝试与

self.jsdriver.find_element_by_css_selector("input.ksb._kvc").click() 
相关问题