使用Selenium为元素提取CSS Selector

时间:2018-03-08 08:26:39

标签: python css selenium web-scraping beautifulsoup

对于我的项目,我需要为我将通过解析找到的给定元素提取CSS选择器。我做的是导航到一个页面与selenium然后使用python-beautiful汤我解析页面,并找出是否有任何元素,我需要CSS选择器。 例如,我可能会尝试找到任何带有id" print"。

的输入标签

soup.find_all('input', {'id': 'print')})

如果我设法找到这样一个元素,我想取其提取的CSS选择器,类似于"输入#print"。我不仅仅发现使用id,而且还包括类和正则表达式的组合。 有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

试试这个。

from scrapy.selector import Selector
from selenium import webdriver

link = "https://example.com"
xpath_desire = "normalize-space(//input[@id = 'print'])"

path1 = "./chromedriver"
driver = webdriver.Chrome(executable_path=path1)
driver.get(link)
temp_test = driver.find_element_by_css_selector("body")
elem = temp_test.get_attribute('innerHTML')


value = Selector(text=elem).xpath(xpath_desire).extract()[0]
print(value)

答案 1 :(得分:1)

好的,我是Python新手,所以我相信有更好的答案,但这是我的两分钱:))

import requests
from bs4 import BeautifulSoup

url = "https://stackoverflow.com/questions/49168556/extract-css-selector-for-
an-element-with-selenium"
element = 'a'
idName = 'nav-questions'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
tags = soup.find_all(element, id = idName)

if tags:
    for tag in tags :
        getClassNames = tag.get('class')
        classNames = ''.join(str('.' + x) for x in getClassNames)
        print element + '#' + idName + classNames
else:
    print ':('

这会打印出如下内容:

a#nav-questions.-link.js-gps-track