鱼C论坛

 找回密码
 立即注册
查看: 3574|回复: 15

selenium时,driver.find_element(By.ID, 'ui-id-1376') 跟 无头有冲突?

[复制链接]
发表于 2022-10-25 07:14:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 blackantt 于 2022-10-26 07:56 编辑

原问题(要在很长的下拉框中选择一个叫1376的条目)已经用加粗部分解决。 但新问题出来了,  无头模式下,代码就出错。 find ID 跟 无头有冲突。  无头下面怎么用 driver.find_element(By.ID  呢?
或者怎么在一个很长的下拉菜单中,滚动右边竖向的滚动条,定位到1376的条目呢?

driver.find_element(By.XPATH, '//*[@id="cssmenu"]/ul/li[3]/a').click()
time.sleep(12)
driver.find_element(By.XPATH, '//*[@id="N_lg-button"]').click()
time.sleep(15)

#下拉选项框太长,下面2句用js先拉右边的滚动条到English 1376这个条目.再click不会出错
target = driver.find_element(By.ID, 'ui-id-1376')
driver.execute_script("arguments[0].scrollIntoView();", target)


driver.find_element(By.XPATH,"//*[@id=\"ui-id-1376\"]").click()

head.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-25 11:37:45 From FishC Mobile | 显示全部楼层
放代码啊,都不知道你在说啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-25 13:54:10 From FishC Mobile | 显示全部楼层
chrome后台不影响运行,自己试一下就知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-25 23:27:59 | 显示全部楼层
3楼说的对,前后台,无头都不影响使用。你的代码和报错发上来看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-26 07:37:45 | 显示全部楼层
本帖最后由 blackantt 于 2022-10-26 07:44 编辑
suchocolate 发表于 2022-10-25 23:27
3楼说的对,前后台,无头都不影响使用。你的代码和报错发上来看看。


有影响的。
已知  driver.find_element(By.ID, 'ui-id-1376')  跟 无头有冲突。
有头下程序没问题, 无头时就找不到了。  根据网上的说法,设置window size也不管用

head.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-26 08:11:05 | 显示全部楼层
blackantt 发表于 2022-10-26 07:37
有影响的。
已知  driver.find_element(By.ID, 'ui-id-1376')  跟 无头有冲突。
有头下程序没问题,  ...

有<>把代码贴出来,贴全。
另外你红圈的无头是用os模块执行谷歌浏览器,同时代无头参数,这和用selenium控制浏览器无头效果是不一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-26 08:24:46 | 显示全部楼层
本帖最后由 blackantt 于 2022-10-27 13:14 编辑
suchocolate 发表于 2022-10-26 08:11
有把代码贴出来,贴全。
另外你红圈的无头是用os模块执行谷歌浏览器,同时代无头参数,这和用selenium控 ...


问题是:  对于一个超长下拉框,我的代码是3步走,如果不用第2步的话,有时间会定位不到第3步要点击的English(1376)这个元素。  但用了第2步的find id的话,在无头模式下,它会报错

第2步如果不用 find id 这种的话,还有其它能往下拉滚动条,定位到目标元素的方法吗?

#第一步
driver.find_element(By.XPATH, '//*[@id="cssmenu"]/ul/li[3]/a').click()
time.sleep(12)
driver.find_element(By.XPATH, '//*[@id="N_lg-button"]').click()
time.sleep(12)

#第2步
#下拉选项框太长,下面2句用js先拉右边的滚动条到English 1376这个条目.再click不会出错
target = driver.find_element(By.ID, 'ui-id-1376')
driver.execute_script("arguments[0].scrollIntoView();", target)

#第3步
driver.find_element(By.XPATH,"//*[@id=\"ui-id-1376\"]").click()

en.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-26 08:31:23 | 显示全部楼层
suchocolate 发表于 2022-10-26 08:11
有把代码贴出来,贴全。
另外你红圈的无头是用os模块执行谷歌浏览器,同时代无头参数,这和用selenium控 ...

想利用已经登录的cookie,只会这种先运行,再控制chrome的方法。
直接在selenium里登录,有点麻烦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-26 08:44:31 | 显示全部楼层
本帖最后由 suchocolate 于 2022-10-26 08:46 编辑
blackantt 发表于 2022-10-26 08:31
想利用已经登录的cookie,只会这种先运行,再控制chrome的方法。
直接在selenium里登录,有点麻烦。


把所有代码贴出来啊!!!
另外selenium也有保存cookie的机制。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 09:32:34 | 显示全部楼层
js = "window.scrollTo(0, document.body.scrollHeight)"
    driver.execute_script(js) # 模拟鼠标滚轮,滑动页面至底部
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-27 13:12:19 | 显示全部楼层
jmy_286501 发表于 2022-10-27 09:32
js = "window.scrollTo(0, document.body.scrollHeight)"
    driver.execute_script(js) # 模拟鼠标滚轮 ...

有200多行,目标在中间呢。    滑动到哪,就刚好能点 目标元素呢?  :)  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 15:58:36 | 显示全部楼层
driver.execute_script("window.scrollTo(x,y)")   # 滚动到具体位置
driver.execute_script("window.scrollBy(x,y)")  # 滚动到具体位置

driver.execute_script("window.scrollBy(0,500)")  # 向下滑动500个像素

driver.execute_script("window.scrollBy(0,-500)")  # 向上滚动500个像素

driver.execute_script("window.scrollBy(500,0)")  # 向右滑动500个像素

driver.execute_script("window.scrollBy(-500,0)")  # 向左滚动500个像素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 15:59:06 | 显示全部楼层
代码给你,自己摸索
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-27 16:03:21 | 显示全部楼层
jmy_286501 发表于 2022-10-27 15:59
代码给你,自己摸索

有没有跟 id 一样定位的方法?  id定位到无头模式下就不行了。   像素定位,窗口/解析度一变,是不是也就不行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 17:15:36 From FishC Mobile | 显示全部楼层
blackantt 发表于 2022-10-27 16:03
有没有跟 id 一样定位的方法?  id定位到无头模式下就不行了。   像素定位,窗口/解析度一变,是不是也就 ...

这个估计就是你的元素还没出啦(渲染)  你就想使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-27 18:00:01 | 显示全部楼层
wp231957 发表于 2022-10-27 17:15
这个估计就是你的元素还没出啦(渲染)  你就想使用

那我再多sleep一下,试试。 不过这问题网上有很多人遇到。 有的说加个window size能行。有的说不行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 21:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表