如何通过Selenium和Python根据html查找元素的Xpath

时间:2018-07-30 09:02:14

标签: python selenium selenium-webdriver xpath webdriver

I want to click on cross using Selenium

在python中尝试过类似的操作,我想使用Selenium单击十字架。

driver.find_element_by_xpath("//span[contains(@onclick, 'parent.$WZRK_WR.closeIframe('60005','intentPreview');')]").click()

6 个答案:

答案 0 :(得分:2)

  1. 在URL下打开,然后单击“添加到Chrome”按钮。

Xpath Helper- https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=en

  1. 将插件添加到Chrome。打开您的应用程序/网页,然后按SHIFT + CTRL + X。黑色窗口将出现在顶部,然后您就可以使用xpath了。

如果xpath无效-那么您将得到xpath错误,如果找不到匹配项,则显示NULL。

注意-要检查元素属性,您仍然可以使用F12,它只是所有浏览器的默认检查元素,然后检查属性并创建自己的xpath并尝试。

Xpath语法 / / tagname[@attribute-name=’value1′],如果您不确定标签名称,那么不用担心,您也可以尝试使用*

//*[@attribute-name='value1']

答案 1 :(得分:2)

您正在处理iframe。请按照以下步骤操作:

  1. 您需要将控件切换到iframe。

  2. 然后执行您的操作(在本例中为“单击关闭”)。

  3. 将控件切换回默认框架。

答案 2 :(得分:2)

根据您共享的 HTML ,单击表示为 X 的元素,首先,您需要在切换到浏览器的同时诱导 WebDriverWait <iframe>并再次诱使 WebDriverWait 使其可单击所需的元素,您可以使用以下解决方案:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='wiz-iframe-intent']")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='CT_Interstitial']//span[@class='CT_InterstitialClose']"))).click()

注意:您必须添加以下导入:

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

答案 3 :(得分:1)

尝试使用此xPath

//div[@id = 'contentDiv']/div/div/span[@class = 'CT_InterstitialClose']

代码:

close_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@id = 'contentDiv']/div/div/span[@class = 'CT_InterstitialClose']")))
close_btn.click()

导入:

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

说明:

WebDriverWait用于等待元素可单击,然后单击它。在此示例中,WebDriverWait将等待至少10秒钟,直到元素可以单击为止。

PS: ,正如我在屏幕快照中看到的那样,您的元素可能位于iframe中。这意味着您必须首先切换到此iframe,才能与其中的元素进行交互。它的代码示例如下:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "XPATH_TO_FRAME")))
# do stuff
close_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@id = 'contentDiv']/div/div/span[@class = 'CT_InterstitialClose']")))
close_btn.click()
# switch back to default content
driver.switch_to.default_content()

答案 4 :(得分:1)

您可以尝试使用此 css_selector

div.CT_InterstitialContents+span.CT_InterstitialClose[onclick]  

Xpath 为:

//div[@class='CT_InterstitialContents']/following-sibling::span[@class='CT_InterstitialClose' and onclick]

答案 5 :(得分:0)

您可以使用span的类名称编写xpath。请参考下面的示例。

//span[@class='amountCharged']