python selenium如何复制文字?

时间:2017-01-16 16:17:35

标签: python selenium xpath

如何使用selenium xpath复制文本? 当我写作

driver.find_elements_by_xpath("//div[@class='rankingItem-value js-countable']").text

我收到下一个错误:

Traceback (most recent call last):
  File "<stdin>", line 15, in <module>
AttributeError: 'list' object has no attribute 'text'

完整代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get('https://www.similarweb.com/')
driver.find_element_by_id("js-swSearch-input").send_keys("www.pornhub.com")
driver.find_element_by_css_selector("button.swSearch-submit").click()
#self.driver.implicitly_wait(30)
time.sleep(10)


content = driver.find_elements_by_xpath("//div[@class='rankingItem-value js-countable']").text
print(content)

我需要将网站的全球排名复制到一个表“22”。怎么样?

3 个答案:

答案 0 :(得分:2)

要选择所需的元素,您需要使用protoc --help方法(将返回与find_element_by_xpath(xpath)匹配的第一个网络元素)或xpath(这将返回列表中的第一个网络元素)由find_elements_by_xpath(xpath)[0]匹配的元素。另外,xpath不正确,因为XPath没有div - 您需要class="rankingItem-value js-countable"。所以请尝试以下方法:

span

content = driver.find_element_by_xpath('//span[@class="rankingItem-value js-countable"]').text

如果您需要获得“国家排名”或“类别排名”,请使用以下内容:

content = driver.find_elements_by_xpath('//span[@class="rankingItem-value js-countable"]')[0].text

答案 1 :(得分:0)

您收到错误是因为您尝试在列表对象上调用该函数。

您正在使用find_element s ,它会返回webelements列表而不是find_element

我不确定您要实现的目标,但如果您尝试打印所有元素的内容,那么以下代码应该可以正常工作。

elements = driver.find_elements_by_xpath("//div[@class='rankingItem-value js-countable']")
content = "".join([element.text for element in elements])
print(content)

答案 2 :(得分:0)

尝试

content = driver.find_elements_by_xpath("//div[@class='rankingItem-value js-countable']")

for c in content:
   print c.text

使用 find_elements_by_xpath 是一种很好的做法,因为如果您在路径中找不到任何内容,则内容[0]将为空,但如果您使用 find_element_by_xpath ,你在路径中找不到任何东西,你会收到错误