鱼C论坛

 找回密码
 立即注册
查看: 2257|回复: 14

[已解决]判断网页某段代码里的颜色,并执行相应代码里的onclick应该怎么实现

[复制链接]
发表于 2023-5-10 23:44:43 | 显示全部楼层 |阅读模式

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

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

x
<con>选择要分解的装备:<br><a href="#" onclick="p.cmd('helptools 73421346');return false;"><img src="/img/arm/db/278.gif" border="0" style="margin-right:5px;"><b><font color="008800">[召唤白龙披风]</font></b></a> <a href="#" onclick="p.cmd('foo fenjie 73421346');return false;">[分解]</a><br>         </con>

例如上面的代码,font color ="008800" 判断等于008800后,执行对应下面的onclick,p.cmd('foo fenjie 73421346');return false;
用python selenium应该怎么实现,求大佬指导
最佳答案
2023-5-11 00:37:31
halemorning 发表于 2023-5-11 00:32
attack_element = element.find_element(By.XPATH,"./following-sibling::a[@title='攻击']")  这一行运 ...

是的,你的观察是正确的。在XPath中, following-sibling:: 轴用于选择当前元素的同级元素。如果"冰河骑士"和"攻击"按钮不是同级元素,这个XPath表达式就无法找到"攻击"按钮。

如果"冰河骑士"和"攻击"按钮不是同级元素,你可能需要修改XPath表达式来定位"攻击"按钮。这需要根据实际的HTML结构来进行。

例如,如果"攻击"按钮是"冰河骑士"元素的父元素的下一个子元素,你可以使用以下的XPath表达式:
attack_element = element.find_element(By.XPATH, "../following-sibling::a[@title='攻击']")

这个表达式中的 .. 表示父元素,所以 ../following-sibling::a[@title='攻击'] 表示"冰河骑士"元素的父元素的同级元素中的"攻击"按钮。

如果你可以提供更多的HTML结构信息,我可以帮你更准确地定位"攻击"按钮。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-10 23:45:09 | 显示全部楼层
可以通过使用Selenium中的find_element_by_xpath方法来获取该元素,然后使用get_attribute方法获取颜色属性值,再根据判断条件执行相应的onclick操作。具体代码如下:
from selenium import webdriver# 启动浏览器driver = webdriver.Chrome()# 打开网页driver.get("网页地址")# 获取元素element = driver.find_element_by_xpath("//font[@color='008800']")# 获取颜色属性值color = element.get_attribute("color")# 判断颜色是否为008800if color == "008800":    # 执行对应的onclick操作    element.click()# 关闭浏览器driver.quit()
其中,"网页地址"需要替换为实际的网页地址。

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
halemorning + 1 + 1 + 1 谢谢大佬指导

查看全部评分

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

使用道具 举报

 楼主| 发表于 2023-5-10 23:49:26 | 显示全部楼层
isdkz 发表于 2023-5-10 23:45
可以通过使用Selenium中的find_element_by_xpath方法来获取该元素,然后使用get_attribute方法获取颜色属性 ...

首先,大哥辛苦了,这么晚还在,我以为您得明天才能回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-10 23:51:31 | 显示全部楼层
isdkz 发表于 2023-5-10 23:45
可以通过使用Selenium中的find_element_by_xpath方法来获取该元素,然后使用get_attribute方法获取颜色属性 ...
<dt id="npc_0"><a href="#" onclick="p.showPetInfo(0,'冰河骑士',[0,0,0,true]);return false;" oncontextmenu="return this.onclick();" hidefocus="1" title="查看"><font color="#004080"><b>[70]</b> 冰河骑士</font> </a><a href="#" onclick="clsHCT();cmd('3 0 '+(Math.pow(ffed34,0.35)+4));return false;" title="攻击"><img src="img/button/a.gif"></a></dt>
其实是这样一串代码,判断如果是 冰河骑士 这个名字的怪,就进行攻击,攻击的话 需要 执行【onclick="clsHCT();cmd('3 0 '+(Math.pow(ffed34,0.35)+4));return false;"】这个里面的js代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-10 23:55:38 | 显示全部楼层
halemorning 发表于 2023-5-10 23:49
首先,大哥辛苦了,这么晚还在,我以为您得明天才能回复

他的代码会报错,新版selenium是
from selenium.webdriver.common.by import By
driver.find_element(By.xxx, 'xxx').xxx

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
halemorning + 1 + 1 + 1 谢谢大佬指导!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2023-5-10 23:56:26 | 显示全部楼层
歌者文明清理员 发表于 2023-5-10 23:55
他的代码会报错,新版selenium是

是,我现在用的是新版的selenium
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-10 23:56:53 | 显示全部楼层
halemorning 发表于 2023-5-10 23:51
其实是这样一串代码,判断如果是 冰河骑士 这个名字的怪,就进行攻击,攻击的话 需要 执行【onclick="c ...

首先,你需要定位到含有"冰河骑士"的元素,然后找到它的同级元素中包含攻击onclick事件的元素。这里我假设这两个元素都是dt元素的子元素。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 启动浏览器
driver = webdriver.Chrome()

# 打开网页
driver.get("你的网页地址")  # 请替换成你的网页地址

# 使用Explicit Wait等待页面完全加载
wait = WebDriverWait(driver, 10)

# 定位到含有"冰河骑士"的元素
element = wait.until(EC.presence_of_element_located((By.XPATH, "//font[contains(text(), '冰河骑士')]")))

# 如果找到了"冰河骑士",则找到它的同级元素中的攻击按钮
if element:
    attack_element = element.find_element_by_xpath("./following-sibling::a[@title='攻击']")

    # 如果找到了攻击按钮,则执行其onclick事件
    if attack_element:
        driver.execute_script(attack_element.get_attribute('onclick'))

# 关闭浏览器
driver.quit()

这段代码首先会等待页面加载,然后找到含有"冰河骑士"的字样的元素。如果找到了这个元素,它会寻找这个元素的同级元素中含有"攻击"标题的链接,并执行其onclick事件。

请注意,这段代码需要在你的实际环境中进行适当的调整,因为我无法知道你的网页的实际结构。此外,你需要确保你的浏览器驱动(例如ChromeDriver)的版本和你的浏览器版本匹配。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-10 23:58:06 | 显示全部楼层
halemorning 发表于 2023-5-10 23:49
首先,大哥辛苦了,这么晚还在,我以为您得明天才能回复

我一天24小时都在,至少能秒回一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-10 23:58:43 | 显示全部楼层
isdkz 发表于 2023-5-10 23:56
首先,你需要定位到含有"冰河骑士"的元素,然后找到它的同级元素中包含攻击onclick事件的元素。这里我假 ...

这次明白了,我就是想学习xpath 和 css selector更详细的东西,但是查不到,您这样举例给我看,我就理解多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-11 00:32:24 | 显示全部楼层
isdkz 发表于 2023-5-10 23:56
首先,你需要定位到含有"冰河骑士"的元素,然后找到它的同级元素中包含攻击onclick事件的元素。这里我假 ...

attack_element = element.find_element(By.XPATH,"./following-sibling::a[@title='攻击']")  这一行运行错误,是不是因为不是同级元素的原因,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 00:37:31 | 显示全部楼层    本楼为最佳答案   
halemorning 发表于 2023-5-11 00:32
attack_element = element.find_element(By.XPATH,"./following-sibling::a[@title='攻击']")  这一行运 ...

是的,你的观察是正确的。在XPath中, following-sibling:: 轴用于选择当前元素的同级元素。如果"冰河骑士"和"攻击"按钮不是同级元素,这个XPath表达式就无法找到"攻击"按钮。

如果"冰河骑士"和"攻击"按钮不是同级元素,你可能需要修改XPath表达式来定位"攻击"按钮。这需要根据实际的HTML结构来进行。

例如,如果"攻击"按钮是"冰河骑士"元素的父元素的下一个子元素,你可以使用以下的XPath表达式:
attack_element = element.find_element(By.XPATH, "../following-sibling::a[@title='攻击']")

这个表达式中的 .. 表示父元素,所以 ../following-sibling::a[@title='攻击'] 表示"冰河骑士"元素的父元素的同级元素中的"攻击"按钮。

如果你可以提供更多的HTML结构信息,我可以帮你更准确地定位"攻击"按钮。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-11 00:47:22 | 显示全部楼层
isdkz 发表于 2023-5-11 00:37
是的,你的观察是正确的。在XPath中, following-sibling:: 轴用于选择当前元素的同级元素。如果"冰河骑 ...

//font[contains(text(), '冰河骑士')]这里面怎么写出 让他并且同时不包含某字符串的写法呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 00:52:22 | 显示全部楼层
halemorning 发表于 2023-5-11 00:47
//font[contains(text(), '冰河骑士')]这里面怎么写出 让他并且同时不包含某字符串的写法呢

在XPath中,要筛选出含有某字符串并且同时不包含另一个字符串的元素,可以使用`contains()`和`not(contains())`函数结合。例如,你想要筛选出包含"冰河骑士",但不包含"测试"的元素,可以使用以下XPath表达式:

//font[contains(text(), '冰河骑士') and not(contains(text(), '测试'))]

这个表达式会匹配包含"冰河骑士"的`<font>`元素,同时要求这些元素的文本内容不包含"测试"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 16:50:12 | 显示全部楼层
halemorning 发表于 2023-5-10 23:56
是,我现在用的是新版的selenium

他用的是GPT4(需要 Money),可是gpt收集了GitHub上的代码,并且还有旧版selenium的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-11 17:52:06 | 显示全部楼层
歌者文明清理员 发表于 2023-5-11 16:50
他用的是GPT4(需要 Money),可是gpt收集了GitHub上的代码,并且还有旧版selenium的代码

我也想用 哈哈,可是我现在不能科学上网了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 07:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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