我试图按下网页https://icomarks.com/ico/online上的这个图表JS上的按钮。我尝试了xpath,完整的xpath和JS路径都没有成功。在这个例子中,你会发现我尝试按下“全部”按钮,如下所示:
谢谢大家!
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url='https://icomarks.com/ico/online'
driver = webdriver.Chrome()
driver.get(url)
# xpath
button = WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="highcharts-34i2crn-1324"]/svg/g[23]/g[1]/g[7]')))
button.click()
# full xpath
button = WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[4]/div/div[1]/div[2]/div/div[2]/svg/g[23]/g[1]/g[7]')))
button.click()
# JS path
element=driver.execute_script('return document.querySelector("#highcharts-7gub67p-1324 > svg > g.highcharts-range-selector-group > g.highcharts-range-selector-buttons > g.highcharts-no-tooltip.highcharts-button.highcharts-button-pressed")')
driver.execute_script("arguments[0].click();", element)
2条答案
按热度按时间kt06eoxx1#
与常规HTML元素相比,Selenium中的SVG元素需要一种不同的方法来定位它们,因为它们是使用XML而不是HTML构建的。为了找到SVG元素,我们可以使用name()xpath函数
对于svg中的元素,你可以像下面这样构建一个xpath,然后点击它们。下面所有可以使用的按钮
完整的代码,你可以通过改变文本值来改变下面的点击选项
rxztt3cl2#
Highcharts为容器创建了一个动态id,所以使用类似
highcharts-34i2crn-1324
的东西不会帮助找到合适的元素。但是,您可以使用全局变量
Highcharts
访问按钮和其他图表属性。例如: