g1879 / DrissionPage

基于python的网页自动化工具。既能控制浏览器,也能收发数据包。可兼顾浏览器自动化的便利性和requests的高效率。功能强大,内置无数人性化设计和便捷功能。语法简洁而优雅,代码量少。
https://drissionpage.cn
BSD 3-Clause "New" or "Revised" License
7.88k stars 754 forks source link

关于网页返回的问题 #363

Open p0prxx opened 3 weeks ago

p0prxx commented 3 weeks ago

测试中发现page.back()的行为和chrome浏览器的back按钮的行为是不一样的,请问有接口可以和点击back按钮一样吗?

p0prxx commented 3 weeks ago

另外,通过page.back()返回的页面,先前网页的元素定位ele变的很慢(需要几十秒甚至更久),但是如果重新page.get(url)定位元素就会很快,为什么呢

g1879 commented 3 weeks ago

可以提供个例子吗?哪个网站行为不一样?

p0prxx commented 3 weeks ago

https://m.ctrip.com/webapp/hotels/hotelsearch/list?__redirectback=1&city=404&countryid=1&atime=2024-09-06&days=1&isfromtaroinquire=1

比如从酒店列表里点进去,然后page.back()后去 ele网页里的元素就卡住了

calvinjoyn commented 3 hours ago

可以提供个例子吗?哪个网站行为不一样?

我也遇到了同样的问题。此外,我可以这样描述这个问题:你使用"eles"将多个元素分配给变量,然后用for循环遍历它们。每次点击都会跳转到一个页面,当你点击后再使用tab.back()返回到之前的页面,并且需要点击其他链接时,会遇到很大的问题,因为它的运行非常异常,并不像应该的那样。如果你测试一下,你会明白的,朋友。

g1879 commented 58 minutes ago

可以提供个例子吗?哪个网站行为不一样?

我也遇到了同样的问题。此外,我可以这样描述这个问题:你使用"eles"将多个元素分配给变量,然后用for循环遍历它们。每次点击都会跳转到一个页面,当你点击后再使用tab.back()返回到之前的页面,并且需要点击其他链接时,会遇到很大的问题,因为它的运行非常异常,并不像应该的那样。如果你测试一下,你会明白的,朋友。

页面跳转了元素就失效了,你这样的用法是不对的。 页面跳转后再回来,就要重新获取元素。

calvinjoyn commented 31 minutes ago

你可以通过类似以下场景进行测试。在许多 Chrome 驱动程序中,后退操作在这样的使用情况下正常工作并且可以访问数据,但这里出现了问题。此外,当在 for 循环中再次访问元素数据时,启动此问题的朋友的抱怨是,他可以在很长时间后才能捕捉到元素,这存在严重的不稳定性问题,朋友。

ads = tab.eles('@class=uEierd', timeout=20) for index, ad in enumerate(ads): link = ad.ele('tag:a', timeout=20) href = link.attr('data-pcu') domain = get_domain(href) if domain not in WHITE_LIST: link.click() tab.wait.doc_loaded() tab.back() ####### 后面操作后,for就中断了,坏掉了!

tab.eles('@class=uEierd', timeout=20)

    #tab.wait.doc_loaded()
    print('log1')
else:
    print('log2')