【问题标题】:How to loop over refreshing a webpage each time I finish processing some data?每次处理完一些数据时如何循环刷新网页?
【发布时间】:2014-08-01 15:26:45
【问题描述】:

我使用带有 Selenium 的 HTTP 基本身份验证的网页的 URL 启动 Firefox。登录后,我只能看到从无法访问的数据库中读取的一行文本。所以我检索那行文本并保存到一个文本文件中。

我需要使用 Selenium 刷新页面,以便从页面上显示的数据库中获取下一个文本行,然后再次保存。这一切我都做到了。但是我不知道如何在读取每一行直到数据库结束后刷新页面(循环刷新过程)。这是我的代码(仅对前 2 行有效):

from selenium import webdriver
profile=webdriver.FirefoxProfile()
profile.set_preference('network.http.phishy-userpass-length','255')
driver=webdriver.Firefox(firefox_profile=profile)
driver.get("https://my_username:my_password@my_websitew.com/page.php")
r=driver.find_element_by_xpath("html").text
with open('urls.txt','a') as f:
    f.write(r)

我该如何解决我的问题?

【问题讨论】:

  • 您需要多久刷新一次页面以及多久出现一次新数据?
  • @alecxe 显示一行后,我将其保存到文本文件中。稍后我会对该行进行进一步处理(但假设我只需将其保存到文本文件中)。只有在保存完成后,我必须刷新页面才能获得下一行。以此类推。
  • 把它放在像whilefor这样的标准控制流循环中,并使用driver.refresh()
  • @alecxe 总结一下:新数据(一个url)只有在我刷新页面时才会出现。将 URL 保存到文本文件后,我必须刷新。
  • @Begueradj 好的,您需要停止刷新和保存吗? :)

标签: firefox selenium python-3.x


【解决方案1】:

将逻辑放入while循环中,检查最近一次命中后页面是否发生变化:

latest_content = None
while True:
    driver.refresh()
    new_content = driver.find_element_by_xpath("html").text
    if new_content != latest_content:
        with open('urls.txt', 'a') as f:
            f.write(new_content)
            latest_content = new_content

【讨论】:

  • 简单而有效的想法,确实:) 你总是比我聪明 :) 谢谢亚历山大。
  • @Begueradj 我希望这对你有用,或者至少走上正轨。您可能还需要以某种方式退出循环。
  • 别担心,我知道那个数据库中的记录数,所以我只会在你的循环中添加一个计数器作为条件:)
  • 事实上,我没有给出我的应用程序的真实上下文(我不允许这样做),所以我通过有时听起来很糟糕的问题尽可能简化我的真实需求.但就像你在我脑海中读到的那样:这个解决方案正是我在真实环境中所需要的,通过添加我的条件(计数器)
  • @Begueradj 是的,这是有道理的。谢谢。
猜你喜欢
  • 2012-09-02
  • 2016-12-08
  • 2022-11-26
  • 2016-07-15
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
相关资源
最近更新 更多