【问题标题】:Why do I get the wrong outputs for values of webelements with my code?为什么我的代码会输出错误的 webelements 值?
【发布时间】:2021-04-15 18:05:01
【问题描述】:

我正在尝试获取此网页上每个文件夹的最后上传时间:https://www.evaschulze-aufgabenpool.de/index.php/s/smwP6ygck2SXRtF?path=%2FKlasse12

我正在使用 python 和 selenium 并尝试了多种搜索方式(通过 xpath 查找,通过类名...),但我收到一条错误消息(“未找到此类元素”)或所有文件夹的值相同. 这里似乎有什么问题,我该如何解决?

这是我目前正在使用的代码:

from time import sleep
from selenium import webdriver

url = "https://www.evaschulze-aufgabenpool.de/index.php/s/smwP6ygck2SXRtF?path=%2FKlasse12"

driver = webdriver.Chrome("chromedriver.exe")
driver.get(url)
driver.maximize_window()

sleep(3)
lenOfPage = driver.execute_script(
    "window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return 
lenOfPage;")
match = False
while not match:
    lastCount = lenOfPage
    sleep(3)
    lenOfPage = driver.execute_script(
        "window.scrollTo(0, document.body.scrollHeight);var 
lenOfPage=document.body.scrollHeight;return lenOfPage;")
    if lastCount == lenOfPage:
        match = True

data = driver.find_element_by_tag_name("table")
data = data.find_elements_by_tag_name("tr")

for element in data:
    name = element.get_attribute("data-file")
    date = element.find_element_by_xpath("//td[4]/span[1]").get_attribute("data-original-title")
    if name is not None:
        print(name, ", ", date)

driver.quit()

【问题讨论】:

    标签: python selenium web-scraping


    【解决方案1】:

    会发生什么?

    // 从当前节点中选择文档中与选择匹配的节点无论它们在哪里 所以它每次迭代都会选择表中的第一个日期。

    那么如何解决呢?

    添加. 表达式以选择当前节点:

    date = element.find_element_by_xpath(".//td[4]/span[1]").get_attribute("data-original-title")
    

    或者删除//表达式,因为元素是当前节点:

    date = element.find_element_by_xpath("td[4]/span[1]").get_attribute("data-original-title")
    

    注意这样会报错,所以下面也改一下 切片表的第一行和最后一行:

    for element in data[1:-1]:
    

    完整代码

    from time import sleep
    from selenium import webdriver
    
    url = "https://www.evaschulze-aufgabenpool.de/index.php/s/smwP6ygck2SXRtF?path=%2FKlasse12"
    
    driver = webdriver.Chrome("C:\Program Files\ChromeDriver\chromedriver.exe")
    driver.get(url)
    driver.maximize_window()
    
    sleep(3)
    lenOfPage = driver.execute_script(
        "window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
    match = False
    while not match:
        lastCount = lenOfPage
        sleep(3)
        lenOfPage = driver.execute_script(
            "window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
        if lastCount == lenOfPage:
            match = True
    
    data = driver.find_element_by_tag_name("table")
    data = data.find_elements_by_tag_name("tr")
    
    
    for element in data[1:-1]:
        name = element.get_attribute("data-file")
        date = element.find_element_by_xpath("td[4]/span[1]").get_attribute("data-original-title")
        print(name, ", ", date)
    
    driver.quit()
    print(name, ", ", date)
    

    输出

    GK Antike Welt Lägel ,  8. Januar 2021 17:53
    GK Astronomie Siewert ,  8. Januar 2021 16:47
    GK Bio 1 Grüninger ,  10. Januar 2021 10:49
    GK Bio 2 Fr ,  8. Januar 2021 09:43
    GK Bio 3 Fr ,  9. Januar 2021 23:48
    GK Bio 4 BöC ,  10. Januar 2021 00:00
    GK Ch Pt ,  10. Januar 2021 19:10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 2020-09-03
      • 2020-07-09
      • 2017-07-08
      相关资源
      最近更新 更多