-
-
Notifications
You must be signed in to change notification settings - Fork 354
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
获取frame内的元素直接panic #541
Comments
报错的是第5行 |
你确定你运行的代码和上诉一致吗?读你的代码,浏览器又没有建立新的页面,一个页面都没有,当然会报错 |
我运行的只多了panic的defer,我修改下运行版本的code,你再试试 |
已更正代码,你看看呢 |
依然无法复现问题,没有打印任何内容,我不知道为啥要写的如此复杂才行,所以我简化了下 package main
import (
"fmt"
"github.com/go-rod/rod"
)
func main() {
page := rod.New().MustConnect().NoDefaultDevice().MustPage("https://coinlist.co/login")
page.MustWaitLoad()
e := page.MustElement("div:not([style*='display:']) > iframe[data-hcaptcha-widget-id]")
fmt.Println("element got")
frame := e.MustFrame()
fmt.Println("frame got ", frame.IsIframe())
c, err := frame.Element("#checkbox")
if err != nil {
fmt.Println("query checkbox:", err)
return
}
fmt.Println("element got")
c.MustClick()
select {}
} |
稍等,我重新提供直接可运行的代码吧 |
页面应该是直接到了login界面去了,这个测试需要进入到hcaptcha的验证界面(使用本地浏览器大概率不会出现hcaptcha的验证),不然程序会block住,就没有任何打印了。 |
这个测试案例的环境有点特殊,需要开一个windows的云服务器(绝对会出现验证界面),或者我把我现在的测试环境给你?问题点就在获取到frame过后,查找frame内到元素空指针了 |
|
可以复现了,把导航的目标地址替换为: https://captcha.website |
是因为frame跨源导致的吗 |
现在以下可以复现这个问题了,原因还在调查中 package main
import (
"github.com/go-rod/rod"
)
func main() {
page := rod.New().MustConnect().NoDefaultDevice().MustPage("https://captcha.website")
f := page.MustElement("div:not([style*='display:']) > iframe[data-hcaptcha-widget-id]").MustFrame()
f.MustElement("#checkbox")
} |
有任何进展吗,boss |
目前感觉是 chromium 的 bug,别的 iframe 网站也有类似问题吗? |
我目前测试了一个另外的页面,有同样的问题存在。 |
主要是这个 Line 349 in 14ebb72
|
我对html不是太熟悉,iframe里面的内容是js动态生成的,是否是有这方面影响呢 |
那也不该返回空 iframe |
目前可以为 iframe 创建一个页面来操作这种 iframe,我在其他iframe页面没有碰到类似问题,这个页面似乎是个特例: package main
import (
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/defaults"
"github.com/go-rod/rod/lib/proto"
"github.com/go-rod/rod/lib/utils"
)
func main() {
defaults.Trace = true
defaults.Show = true
page := rod.New().MustConnect().NoDefaultDevice().MustPage("https://captcha.website")
f := page.MustElement("div:not([style*='display:']) > iframe[data-hcaptcha-widget-id]").MustFrame()
p := page.Browser().MustPageFromTargetID(proto.TargetTargetID(f.FrameID))
p.MustElement("#checkbox").MustClick()
utils.Pause()
} |
好的,非常感谢! |
move this issue to #548 |
Rod Version: v0.102.1
运行结果
c, err := frame.Element("#checkbox")语句会直接空指针panic
The text was updated successfully, but these errors were encountered: