Скрипт не может найти кнопку, используя xpath или id или что-либо еще через Selenium и Python - PullRequest
0 голосов
/ 07 февраля 2019

Я довольно новичок в использовании Python, но это довольно простой сценарий, который я пытаюсь написать.Я смог войти на сайт правильно, но чтобы перейти к следующему шагу, я пытаюсь нажать на кнопку с надписью «Market Express».

Я могу видеть xpath (// [@ id = "MarketExpress"]), а также идентификатор кнопки (MarketExpress).Когда я запускаю модуль, я получаю эту ошибку: "Невозможно найти элемент: // [@ id =" MarketExpress "]"

Я даже дважды проверил xpath, используя дополнение Firefox "xpath finder"чтобы убедиться, что у меня правильный код.

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

usernameStr = '***'
passwordStr = '***'

driver = webdriver.Firefox()
driver.get(('https://www.myurl.com'))

username = driver.find_element_by_id('USERID')
username.send_keys(usernameStr)
password = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'currentPassword')))
password.send_keys(passwordStr)
nextButton = driver.find_element_by_id('submit-button')
nextButton.click()

password = driver.find_element_by_name('currentPassword')
password.send_keys(passwordStr)
nextButton = driver.find_element_by_name('Submit')
nextButton.click()

marketExpress = driver.find_element_by_xpath('//*[@id="MarketExpress"]').click();

Я пробовал так много разных вещей, но не могу заставить скрипт нажать эту кнопку, я был бы признателен за любую помощь!

Ниже приведенhtml где кнопка:

<input class="crtordbtn" type="button" value="Market Express" `id="MarketExpress" onclick="parent.location.href='/OMAPX?userId=051220665&amp;clientId=8&amp;UserType=null&amp;BuyerCookie=null';">`

Ниже приведена таблица, в которой кнопка находится:

 <div id="sidebar-left" height="50%" style="margin-right:10px">
<div id="bar" style="margin-right:-3px"><h1>Select To Order</h1></div>

<div style="width:100%; height:50%; border-left:1px solid #cccccc;border-right:1px solid #cccccc;border-bottom:1px solid #cccccc;margin-bottom:10px;"> 

 <table width="235px" cellspacing="0" cellpadding="0" border="0">

 <!--  <tr align="center">
 <td style="padding: 5px 40px 0px 40px;">


 <input class="crtordbtn" type="button" value="eSysco Express" id="esyscoExpress" onClick="parent.location.href='http://flex2.esysco.net';" />
 </td>
 </tr>
 <tr >
 <td style="padding: 5px 40px 0px 40px;text-align:left">
 <p>Our latest order management application with improved performance and enhanced usability</p>
</td>
</tr>-->

<tbody><tr align="center">

    <td style="padding: 5px 40px 0px 40px;">

            <input class="crtordbtn" type="button" value="Market Express" id="MarketExpress" onclick="parent.location.href='/OMAPX?userId=051220665&amp;clientId=8&amp;UserType=null&amp;BuyerCookie=null';">


    </td></tr>
    <tr>
    <td style="padding: 5px 40px 0px 40px;text-align:left">
        <p>Our latest order management application with improved performance and enhanced usability</p>
    </td></tr>
    <tr>



</tr>

</tbody></table>
 </div>

</div>

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Возможно, попытка с идентификатором сработает.Надеюсь, это поможет

driver.find_element_by_id("MarketExpress").click()
0 голосов
/ 07 февраля 2019

Требуемый элемент является динамическим элементом, поэтому для нахождения элемента необходимо вызвать WebDriverWait , чтобы элемент был активным , и вы можете использовать любое из следующих решений:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.crtordbtn#MarketExpress[onclick*='OMAPX?userId']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='crtordbtn' and @id='MarketExpress'][contains(@onclick, 'OMAPX?userId')]"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 07 февраля 2019

Попробуйте это. Должно работать.

driver.find_element_by_xpath("//table[@id='esyscoExpress']/tbody/tr//input[@class='crtordbtn']").click()
...