无法通过Selenium驱动程序单击javascript元素

时间:2019-05-12 15:37:30

标签: python selenium selenium-webdriver xpath selenium-chromedriver

我在xpath下使用给定的格式,但是我的脚本没有单击这些元素(python,scrapy,selenium)

driver.find_element(By.XPATH, '//*[@id="MiniReport2"]/thead/tr/td[@class="Over" and contains(@onclick,"MenuClick")]')

HTML示例:

<table id="MiniReport2" border="0" cellspacing="0" cellpadding="0" class="Menu Unit" style="">            
            <thead>                
                <tr>                    
                    <td onmouseover="className='Over'" onmouseout="className=''" onclick="javascript:MenuClick('MiniReport2');" class="">
                         <div class="Plus">4. Report</div>                    
                    </td>                
                </tr>            
            </thead>            
</table>

2 个答案:

答案 0 :(得分:0)

欢迎来到。

这是您可以使用的xpath。

//table[@id='MiniReport2']//td[contains(@onclick,'MenuClick')]

这是脚本(我想您正在使用python)

driver.find_element_by_xpath("//table[@id='MiniReport2']//td[contains(@onclick,'MenuClick')]").click()

如果您想点击4. Report,请使用以下内容

driver.find_element_by_xpath("//table[@id='MiniReport2']//td[contains(@onclick,'MenuClick')]/div[normalize-space(.)='4. Report']").click()

答案 1 :(得分:0)

要处理动态元素,请使用WebdriverWait并遵循定位器策略。

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

element=WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,'//table[@class="Menu Unit"][starts-with(@id,"MiniReport")]//tr//td[contains(@onclick,"MenuClick")]/div[@class="Plus"][contains(.,"4. Report")]')))
element.click()