Selenium单击链接

时间:2018-03-17 17:39:37

标签: python selenium

使用selenium时,我一直面临一个重大问题:

在Trivago网站" https://www.trivago.com/site_map",我一直试图让脚本点击每个大陆,但它似乎不起作用:

element = driver.find_element_by_class_name('link')

element.click()

我还尝试使用以下xpath:

//*[@id="js_sitemap"]/div/div/ul/li[1]/a

任何人都可以帮我一把吗?

2 个答案:

答案 0 :(得分:1)

您在尝试点击li节点时需要处理子链接:

driver.find_element_by_css_selector('li.link>a').click()

但是如果你想打开每个大陆的页面,你最好得到参考文献清单并获得每个参考文献:

links = [link.get_attribute('href') for link in driver.find_elements_by_css_selector('li.link>a')]

for link in links:
    driver.get(link)
    # do something with continent

答案 1 :(得分:1)

正如@DyZ指出的那样,您只需使用页面上提供的网址(例如'https://www.trivago.com/north-america-34225/hotel')来抓取列表。但是,您可以迭代find_elements_by_tag_name并为每个对象引用调用click方法:

from selenium import webdriver
d = webdriver.Chrome('/Users/jamespetullo/Downloads/chromedriver')
d.get('https://www.trivago.com/site_map')
for continent in d.find_elements_by_tag_name('a'):
   if continent.text in [u'Africa', u'Asia', u'Australia & Oceania', u'Central and South America', u'Europe', u'North America']:
      continent.click()
      #do something with page source or current page object
      d.back()

或者,要查找链接,您可以使用bs4urllib

from bs4 import BeautifulSoup as soup
import urllib
import re
data = str(urllib.urlopen('https://www.trivago.com/site_map').read())
links = [i.text for i in soup(data, 'lxml').find_all('a', href=True) if re.findall('[a-zA-Z\-]+\-\d+/hotel', i['href'])]

输出:

[u'Africa', u'Asia', u'Australia & Oceania', u'Central and South America', u'Europe', u'North America']