CSS定位器:无法通过代码

时间:2017-04-20 12:32:05

标签: python css selenium xpath web-scraping

以下是我正在处理的链接:

https://www.formula1.com/en/results.html/2017/drivers.html

我试图检索“驱动程序”列下的所有名称。

以下是我在代码中使用的css选择器

dname = name.find_element_by_css_selector('span.hide-for-mobile').text

测试css选择器插件中的代码。查看屏幕截图enter image description here

以下是代码:

from selenium import webdriver
import os
import csv

chromeDriver = "/home/manoj/workspace2/RedTools/test/chromedriver"
os.environ["webdriver.chrome.driver"] = chromeDriver
driver = webdriver.Chrome(chromeDriver)
driver.get("https://www.formula1.com/en/results.html/2017/drivers.html")

driverNames = driver.find_elements_by_xpath("//th[contains(.,'Driver')]")

for name in driverNames:
    dname = name.find_element_by_css_selector('span.hide-for-mobile').text
    print(dname)
    print('its done')

此时出现的错误是:

  

selenium.common.exceptions.NoSuchElementException:消息:没有这样的   element:无法定位元素:{“method”:“css   选择”, “选择器”: “span.hide换移动”}

这是什么,我做错了。在这里的帮助将非常感谢。

2 个答案:

答案 0 :(得分:2)

您正在尝试搜索span列表中每个th孩子driverNames元素...但th已没有子元素

您可以使用

names = [pilot.text for pilot in driver.find_elements_by_css_selector('span.hide-for-mobile')]

获取名称列表

答案 1 :(得分:0)

driver.get("https://www.formula1.com/en/results.html/2017/drivers.html");
Thread.sleep(200);
for(int i=1;i<=driver.findElements(By.xpath("//tr/td[3]")).size();i++)
{     System.out.println(driver.findElement(By.xpath("html/body/div[2]/main/article/div /div[2]/div[2]/div[2]/div/table/tbody/tr["+i+"]/td[3]")).getText());
}

我在java中试过这个,你可以把它转换成python作为你的知识