【问题标题】:What is the XPath/CSS selector of the element in the webpage网页中元素的 XPath/CSS 选择器是什么
【发布时间】:2015-12-29 00:38:46
【问题描述】:

我是 Selenium/Python 的新手。尝试复制数据时卡住了。我正在尝试将数据复制到列表中。每次我尝试在 XPath/CSS 选择器中突出显示元素名称时,它总是给我一个错误提示“找不到元素”。有人可以帮我找到确切的 CSS 选择器/xpath 吗?下面是我为 CSS 选择器尝试过的代码

browser.get("http://ae.bizdirlib.com/taxonomy/term/1493") # Load page
links =[]

link = browser.find_element_by_css_selector("h2 > a")

#for link in links:
link.send_keys(Keys.CONTROL + Keys.RETURN)
link.send_keys(Keys.CONTROL + Keys.PAGE_UP)

elem = browser.find_element_by_css_selector(".content.clearfix>div>fieldset>div>ul>li>span")
elem.send_keys("bar")
elem.send_keys(Keys.CONTROL, 'a') #highlight all in box
c=elem.send_keys(Keys.CONTROL, 'c') #copy
#elem.send_keys(Keys.CONTROL, 'v') #paste
print c

【问题讨论】:

    标签: python-2.7 selenium xpath css-selectors web-scraping


    【解决方案1】:

    元素的精确 css 选择器:

    elem = browser.find_element_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span")
    

    您可以从 here 学习 css 选择器。

    【讨论】:

    • 感谢它的帮助。我正在尝试从 css 特定 id 复制文本。当我试图复制时,它总是给我一个错误。 elem = browser.find_element_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span").text 错误是“列表”对象没有属性“文本”...你能帮我弄清楚错误是什么吗?
    • 首先将所有元素存储在列表元素中,然后对其进行迭代。使用 find_elements_by_css_selector(..) 尽管 find_element_by_css_selector(..) elems = browser.find_elements_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span") for elem in elems: print elem.text
    • 没有错误也没有输出。我的意思是当我执行下面的代码时,解释器只是空的。我也尝试在没有 for 循环的情况下打印元素。它只是显示一个空列表。
    【解决方案2】:

    请记住,您已经获得了 css-selector,您缺少的是 Selenium waits,用于显示和交互元素。每次网页的状态更改(AJAX、重新加载等)时,您都需要为您需要的元素设置一个 way of waiting

    注意,显式等待是推荐的解决方案。而且你真的不应该混淆两个等待(显式和隐式)。

    一个简单的例子:

    from selenium.webdriver.support import expected_conditions as EC
    
    element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "myElementId"))
        )
    

    【讨论】:

    • 我已经添加了一个明确的等待时间.sleep(5)。是的,我现在能够找到元素。但无法找到特定元素的文本。
    • 使用time.sleep(5) 是一种非常糟糕的做法。您不能采用示例中的显式等待吗?
    【解决方案3】:

    第二个问题的答案:

    from selenium import webdriver
    
    browser = webdriver.Firefox()
    
    browser.implicitly_wait(3)
    
    browser.get("http://ae.bizdirlib.com/taxonomy/term/1493")
    
    links = browser.find_elements_by_css_selector("h2 > a")
    links[0].click()
    
    elems = browser.find_elements_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span")
    
    for elem in elems:
        print elem.text
    

    输出:

    =======

    Sabbro - F.Z.C
    Ajman
    United Arab Emirates
    Free Zone(Ajman Free Zone)
    Click Here to Buy United Arab Emirates Full Data
    Business Directory Database Supermarket
    

    【讨论】:

    • 你是个天才!!!非常感谢您的帮助。如果您对如何将这些值发送到我可以存储它们的 excel / 框架有一个想法,那也很棒......感谢您的帮助。 3 天以来一直卡在这个问题上。
    • 在尝试集成整个代码时遇到这个问题。所以我创建了一个名为 capture 的函数。它将调用上面的代码来获取上面描述的必要信息,但问题是函数没有调用。是因为for循环吗?你能帮我吗。我正在粘贴下面的代码。
    • browser.get("http://ae.bizdirlib.com/taxonomy/term/1493") # Load pagelinks = browser.find_elements_by_css_selector("h2 > a")for link in links:link.send_keys(Keys.CONTROL + Keys.RETURN)link.send_keys(Keys.CONTROL + Keys.PAGE_UP)time.sleep(5)test() #### want to call thislink.send_keys(Keys.CONTROL + 'w')def test():elems = browser.find_elements_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span")for elem in elems:print elem.text
    • 你能帮我解决这个Link的问题吗...提前非常感谢您的帮助。
    • 如果您还有其他问题,请发布新问题。
    猜你喜欢
    • 2021-12-22
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2015-01-28
    • 2022-07-21
    • 1970-01-01
    相关资源
    最近更新 更多