Как написать Xpath для передачи динамического значения - PullRequest
1 голос
/ 05 марта 2019

Как написать Xpath для следующего
screenshot

Выделенные значения есть в некоторой переменной (st_name). Выделенные значения и округленные красным цветом значения будут динамически меняться. Я не могу понять, как написать Xpath для этого.

import xlrd

path = r'C:\Users\tmou\PycharmProjects\Python\WebScraping\Book2.xlsx'
workbook = xlrd.open_workbook(path)
sheet = workbook.sheet_by_index(0)
for c in range(sheet.ncols):
    for r in range(sheet.nrows):
        st = (sheet.cell_value(r, c))
        try:
            if st == float(st):
                st_string = int(st)
                #variable = 1622662
                #new_string = "javascript:popAnalyze("" + str(st_string) + "","SP0001622662","CS3_pro2_axeda6","5336293761");"
                #driver.find_element_by_xpath("//input[@class='t2']/@onclick='" + st_string + "'").click()
                #driver.find_element_by_xpath("//input[@value='Analyze' and contains(@onclick='" + st_string + "']")
                #driver.find_element_by_xpath("//a[@title='" + st_string + "']")

HTML:

<input class="t2" style="background-color:#008000;" title="Jump to Detailed Analysis" type="button" value="Analyze" onclick="javascript:popAnalyze(&quot;1622662&quot;,&quot;SP0001622662&quot;,&quot;CS3_pro2_axeda6&quot;,&quot;5336293761&quot;);">

Ответы [ 3 ]

2 голосов
/ 05 марта 2019

Если искомое значение находится в атрибуте onclick , то должно работать следующее выражение Xpath:

string(//input[@class='t2']/@onclick)

Редактировать 1

Можете ли вы попробовать для XPath версии 3 или ниже:

//input[(@class='t2' and matches(@onclick,'1622662'))]

И для XPath версии 3.1:

//input[@class='t2']/[matches(@onclick, '1622662')]
1 голос
/ 05 марта 2019

Есть много способов сделать это без значения onclick, поэтому не беспокойтесь, даже если он динамический, как показано ниже:

//input[@title='Jump to Detailed Analysis']

или

//input[@value='Analyze']

или

//input[@value='Analyze' and @title='Jump to Detailed Analysis']

РЕДАКТ. 1:

Вы можете использовать переменную, как показано ниже:

variable = "Analyze"
xpath = "//input[@value='" + variable + "']"

РЕДАКТИРОВАТЬ 2:

variable = 1622662
new_string = "javascript:popAnalyze(&quot;" + str(variable) + "&quot;,&quot;SP0001622662&quot;,&quot;CS3_pro2_axeda6&quot;,&quot;5336293761&quot;);"

РЕДАКТИРОВАТЬ 3:

variable = 1622662
xpath = "//input[@value='Analyze' and contains(@onclick,'" + str(variable) + "')]"

if driver.find_elements_by_xpath(xpath):
    driver.find_element_by_xpath(xpath).click()
  • В приведенном выше коде variable будет вашим динамическим значением.
  • xpath переменная будет иметь динамический путь xpath, основанный на значении variable
  • if driver.find_elements_by_xpath(xpath): проверит, если хотя бы один элемент с выходом xpath
  • если существует, нажмите на него
0 голосов
/ 05 марта 2019

Используйте один из следующих XPath:

//input[@value='Analyze' and contains(@onclick,'"+st_name+"')]

ИЛИ

//input[@title='Jump to Detailed Analysis' and contains(@onclick,'"+st_name+"')]

Final Code :

driver.find_element_by_xpath("//input[@title='Jump to Detailed Analysis' and contains(@onclick,'"+st_name+"')]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...