Selenium单击链接

问题描述 投票:0回答:2

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

在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

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

python selenium
2个回答
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
投票

正如@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']
© www.soinside.com 2019 - 2024. All rights reserved.