Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Selenium中抓取页面HTML并跟踪下一个链接_Python_Selenium - Fatal编程技术网

Python 如何在Selenium中抓取页面HTML并跟踪下一个链接

Python 如何在Selenium中抓取页面HTML并跟踪下一个链接,python,selenium,Python,Selenium,我正试图搜刮一个网站进行研究,我被卡住了。我希望scraper读取页面源代码,并将其附加到本地HTML文件中,以便我可以在校园外分析数据。我尝试了BeautifulSoup和Scrapy,但我发现我需要使用Selenium与页面交互,以浏览我所在大学的认证系统。(我不包括该代码,因为它与我的问题无关。) 当我运行脚本时,它会导航到页面并单击链接,但它只保存第一个页面的HTML。然后,每次单击链接时,它都会复制并附加该页面的HTML 如何使用Selenium单击下一页链接,删除HTML并保存到文件

我正试图搜刮一个网站进行研究,我被卡住了。我希望scraper读取页面源代码,并将其附加到本地HTML文件中,以便我可以在校园外分析数据。我尝试了
BeautifulSoup
Scrapy
,但我发现我需要使用
Selenium
与页面交互,以浏览我所在大学的认证系统。(我不包括该代码,因为它与我的问题无关。)

当我运行脚本时,它会导航到页面并单击链接,但它只保存第一个页面的HTML。然后,每次单击链接时,它都会复制并附加该页面的HTML

如何使用
Selenium
单击下一页链接,删除HTML并保存到文件,直到到达最后一页

source = driver.page_source

while True:
    with open("test.html", "a") as TestFile:
        TestFile.write(source)
        try:
            driver.implicitly_wait(200)
            driver.find_element_by_css_selector('li.next').click()
        except AttributeError:
            break
编辑:我将AttributeError添加到except,并收到以下错误

selenium.common.exceptions.StaleElementReferenceException:消息: 陈旧元素引用:元素未附加到页面文档


我的假设是我需要减慢
.click()
,这就是我最初使用隐式等待的原因,但这似乎没有起到作用。

您需要将
页面源代码
分配给while循环内的
源代码
变量

source = driver.page_source

while True:
with open("test.html", "a") as TestFile:
    TestFile.write(source)
    try:
        driver.implicitly_wait(200)
        driver.find_element_by_css_selector('li.next').click()
        source = driver.page_source
    except AttributeError:
        break

您需要将
页面源代码
分配给while循环中的
源代码
变量

source = driver.page_source

while True:
with open("test.html", "a") as TestFile:
    TestFile.write(source)
    try:
        driver.implicitly_wait(200)
        driver.find_element_by_css_selector('li.next').click()
        source = driver.page_source
    except AttributeError:
        break


去掉你的裸体例外,你会得到一条信息更丰富的错误消息谢谢n1c9,我在例外中添加了一个AttributeError,它给了我上面添加的错误代码:StaleElementReferenceException。页面上是否有弹出窗口或类似的内容?还是像往常一样翻到下一页?另外,
隐式等待(num)
应该在初始化webdriver时设置,但这只是一种风格。它会像往常一样翻页,直到到达第8页或第9页,然后抛出陈旧元素异常。去掉裸除,您会得到一条信息更丰富的错误消息感谢n1c9,我向except添加了一个AttributeError,它给了我上面添加的错误代码:StaleElementReferenceException。页面上是否有弹出窗口或类似的内容?还是像往常一样翻到下一页?另外,
隐式等待(num)
应该在初始化webdriver时设置,但这只是一种风格。它会像往常一样翻转页面,直到到达第8页或第9页,然后抛出陈旧元素异常。谢谢!这很有帮助,但现在我在每个页面的输出中都得到了副本。例如,它输出:Page1Page1 Page1Page2Page2Page2Page2Page2Page3Page3单击“下一个链接”后,使脚本等待一段时间,然后获取页面源。正如您所建议的,我添加了一个等待,它现在似乎正在工作。谢谢,@sudharsansevaraj很高兴能帮助你!!如果这对你有帮助,那么一定要接受答案:)谢谢!这很有帮助,但现在我在每个页面的输出中都得到了副本。例如,它输出:Page1Page1 Page1Page2Page2Page2Page2Page2Page3Page3单击“下一个链接”后,使脚本等待一段时间,然后获取页面源。正如您所建议的,我添加了一个等待,它现在似乎正在工作。谢谢,@sudharsansevaraj很高兴能帮助你!!如果这对您有帮助,请确保接受以下答案:)