python - 如何使用Python通过Selenium点击图片

标签 python selenium xpath css-selectors webdriverwait

我一直在尝试选择一个图像标签,但是,由于它没有任何名称和 ID,我在执行相同操作时遇到了麻烦。

HTML:

<tr __gwt_row="0" __gwt_subrow="0" class="GPBYFDECG">
<td class="GPBYFDEBG GPBYFDEDG GPBYFDEEG datagridCellStyle">
    <div style="outline-style:none;" __gwt_cell="cell-gwt-uid-29">
        ACD DETAILS NEW
    </div>
</td>
<td class="GPBYFDEBG GPBYFDEDG datagridCellStyle">
    <div style="outline-style:none;" __gwt_cell="cell-gwt-uid-30">
        ACD Details
    </div>
</td>
<td class="GPBYFDEBG GPBYFDEDG GPBYFDEOG datagridCellStyle">
    <div style="outline-style:none;" __gwt_cell="cell-gwt-uid-31" tabindex="0">


        //IMAGE THAT I NEED TO SELECT AND CLICK
        <img onload="this.__gwtLastUnhandledEvent=&quot;load&quot;;" src="http://172.00.00.00:8080/demoreports/DemoReportsApp/clear.cache.gif" style="width:25px;height:23px;background:url(http://172.00.00.00:8080/demoreport/DemoReportsApp/0210CFCB6CBE82D7E9FAC82D9F901495.cache.png) no-repeat -333px 0px;" border="0">
    </div>
</td>

代码:

driver.find_element_by_xpath('//img[@onload="this.__gwtLastUnhandledEvent=&quot;load&quot;;"]').click()

上面的代码不起作用。 有没有其他方法,我可以在此 img 上单击(),因为它会生成 javscript 渲染的报告。

最佳答案

所需的元素是动态元素,因此您必须为所需的 ElementToBeClickable 引发 WebDriverWait 并且您可以使用以下任一 Locator Strategies作为解决方案:

  • 使用CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td.datagridCellStyle img[onload*='gwtLastUnhandledEvent'][src*='demoreports/DemoReportsApp/clear']"))).click()
    
  • 使用XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[contains(@class, 'datagridCellStyle')]//img[contains(@onload, 'gwtLastUnhandledEvent') and contains(@src, 'demoreports/DemoReportsApp/clear')]"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

关于python - 如何使用Python通过Selenium点击图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54259623/

相关文章:

selenium - 找不到正确的Xpath

python - 在 emacs 中调试 python 程序

python - 尝试检查整数列表中每个元素的条件

python - 将字典转换为数据帧,其中键和值都有自己的列

python - 查找页面上文本的部分内容,然后使用 Selenium 在 Python 中返回该 <div> 的完整内容

javascript - 用于提取html标签的xpath

python - 动态创建的 kivy 按钮立即运行 on_press 和 on_release

seleniumclear() 命令不清除元素

xpath - 无法在 Selenium 中获取第 n 个节点

python - 从网站收到的 DOM 没有 <a> 链接