halemorning 发表于 2023-5-10 23:44:43

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

<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应该怎么实现,求大佬指导

isdkz 发表于 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")

# 判断颜色是否为008800
if color == "008800":
    # 执行对应的onclick操作
    element.click()

# 关闭浏览器
driver.quit()


其中,"网页地址"需要替换为实际的网页地址。

halemorning 发表于 2023-5-10 23:49:26

isdkz 发表于 2023-5-10 23:45
可以通过使用Selenium中的find_element_by_xpath方法来获取该元素,然后使用get_attribute方法获取颜色属性 ...

首先,大哥辛苦了,这么晚还在,我以为您得明天才能回复

halemorning 发表于 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,'冰河骑士',);return false;" oncontextmenu="return this.onclick();" hidefocus="1" title="查看"><font color="#004080"><b></b> 冰河骑士</font>&nbsp;</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代码

歌者文明清理员 发表于 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

halemorning 发表于 2023-5-10 23:56:26

歌者文明清理员 发表于 2023-5-10 23:55
他的代码会报错,新版selenium是

是,我现在用的是新版的selenium

isdkz 发表于 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")))

# 如果找到了"冰河骑士",则找到它的同级元素中的攻击按钮
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)的版本和你的浏览器版本匹配。

isdkz 发表于 2023-5-10 23:58:06

halemorning 发表于 2023-5-10 23:49
首先,大哥辛苦了,这么晚还在,我以为您得明天才能回复

我一天24小时都在,至少能秒回一次{:10_256:}

halemorning 发表于 2023-5-10 23:58:43

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

这次明白了,我就是想学习xpath 和 css selector更详细的东西,但是查不到,您这样举例给我看,我就理解多了

halemorning 发表于 2023-5-11 00:32:24

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

attack_element = element.find_element(By.XPATH,"./following-sibling::a[@title='攻击']")这一行运行错误,是不是因为不是同级元素的原因,

isdkz 发表于 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结构信息,我可以帮你更准确地定位"攻击"按钮。

halemorning 发表于 2023-5-11 00:47:22

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

//font这里面怎么写出 让他并且同时不包含某字符串的写法呢

isdkz 发表于 2023-5-11 00:52:22

halemorning 发表于 2023-5-11 00:47
//font这里面怎么写出 让他并且同时不包含某字符串的写法呢

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

//font

这个表达式会匹配包含"冰河骑士"的`<font>`元素,同时要求这些元素的文本内容不包含"测试"。

歌者文明清理员 发表于 2023-5-11 16:50:12

halemorning 发表于 2023-5-10 23:56
是,我现在用的是新版的selenium

他用的是GPT4(需要 Money),可是gpt收集了GitHub上的代码,并且还有旧版selenium的代码

halemorning 发表于 2023-5-11 17:52:06

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

我也想用 哈哈,可是我现在不能科学上网了
页: [1]
查看完整版本: 判断网页某段代码里的颜色,并执行相应代码里的onclick应该怎么实现