Выполнение события из питона - PullRequest
0 голосов
/ 03 июля 2019

Как новичок в Python, я пытаюсь сделать простой проект автоматического входа в систему. Еще одна вещь, которую я должен сделать, это щелкнуть мышью на 4-й строке HTML-таблицы, чтобы показать мне правильный контент. HTML-код этого сегмента:

<tr class="tbl_seznam_barva_1" onclick="setTimeout('__doPostBack(\'ctl02$ctl00$BrowseSql1\',\'Select$0\')',470);" onmouseover="radekSeznamuClass=this.className;this.className='RowMouseOver';" onmouseout="this.className=radekSeznamuClass;">
  <td>virtuálny terminál</td>
</tr>

Как выполнить это событие "onclick"?

from selenium import webdriver

#...

browser = webdriver.Firefox()

elem = browser.find_element_by_name('txtUsername')
elem.send_keys('myLogin' + Keys.RETURN)

elem = browser.find_element_by_xpath("//tr[4]")

# some code for event execution goes here...

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Если вы хотите click() для элемента с текстом как virtuálny terminál, вы можете достичь этого с помощью:

browser.find_element_by_xpath("//*[text()='virtuálny terminál']").click()

Если вам нужно нажать на несколько элементов, вы можете использовать цикл forвсе элементы.

elements = browser.find_element_by_xpath("//tr[4]")
for i in elements:
    print(i.text)

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

Вы можете использовать ActionChains:

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

browser = webdriver.Firefox()

my_elem = browser.find_element_by_xpath("//tr[4]")
action = ActionChains(browser)
action.move_to_element(my_elem)
# action.move_to_element_with_offset(my_elem, 5, 5)
action.click()
action.perform()

Редактировать2:

Если вы не можетеиспользуйте chromedriver, и вам больше нечего делать, вы можете использовать execute_script:

element = browser.find_element_by_xpath("//tr[4]")
browser.execute_script("arguments[0].click();", element)
0 голосов
/ 04 июля 2019

Проблема в том, что нужно дождаться полной загрузки веб-страницы

После строки elem.send_keys('myLogin' + Keys.RETURN) веб-странице требуется время для визуализации контента, поэтому следует добавить задержку:

import time

# ...

elem.send_keys('myLogin' + Keys.RETURN)
time.sleep(1)
elem=browser.find_element_by_xpath("//tr[4]")
elem.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...