Изменить элемент в Python с помощью Selenium - PullRequest
1 голос
/ 30 апреля 2019

Я искал способ изменить элемент веб-страницы и пока не нашел (или не понял), как это сделать.В приведенном выше элементе я хочу иметь возможность изменить числовое значение на другое число, которое представлено заполнителем (т. Е. Кивком для числа розыгрышей. Или я должен делать это вручную каждый раз, когда я запускаю программу?).

Моя операционная система - Ubunt 18.04, в которой используется новейшая среда разработки Python, selenium и pycharm.

Это всего лишь пара веб-сайтов, которые я посетил, и я посетил много.

https://www.youtube.com/watch?v=tdgAIDR9snc

http://allselenium.info/javascript-using-python-selenium-webdriver/

Установить значение ввода вместо sendKeys () - узел доступа к селену

WEBELEMENT:

<select name="ctl00$MainContent$ddlRange" id="ctl00_MainContent_ddlRange">
    <option selected="selected" value="1"> &nbsp;&nbsp;Single Draw</option>
    <option value="2"> &nbsp;&nbsp;2&nbsp;Consecutive</option>
    <option value="3"> &nbsp;&nbsp;3&nbsp;Consecutive</option>
    <option value="4"> &nbsp;&nbsp;4&nbsp;Consecutive</option>
    <option value="5"> &nbsp;&nbsp;5&nbsp;Consecutive</option>
    <option value="10">10&nbsp;Consecutive</option>
    <option value="20">20&nbsp;Consecutive</option>
</select>

И мой основной код:

from Selenium import WebDriver

browser = webdriver.Chrome('/usr/bin/chromedriver')
page=browser.get("whatever address of whatever webpage interested in")

elem=browser.find_element_by_css_selector("#ctl00_MainContent_ddlRange")
browser.execute_script("arguments[0].setAttribute('<option selected="selected" value="20">','20&nbsp;Consecutive</option>')", elem)

Моя цель - изменить значение значения в первой части тега параметра с:

<option selected="selected" value="1"> &nbsp;&nbsp;Single Draw</option>

на следующее:

<option selected="selected" value="44"> &nbsp;&nbsp;Single Draw</option>

В скрипте execute_script я всегда получаю ожидаемый конец оператора после последнего).Я также получаю ожидаемые ошибки ',' или ')' в областях "selected" и "20"

Также к ним относятся селекторы css и xpath:

for <select name="ctl00$MainContent$ddlRange" id="ctl00_MainContent_ddlRange">
selector = #ctl00_MainContent_ddlRange
xpath    = //*[@id="ctl00_MainContent_ddlRange"]

for <option>
selector = #ctl00_MainContent_ddlRange > option:nth-child(1)   (note that nth-child() can be 1 - 7)
xpath    = //*[@id="ctl00_MainContent_ddlRange"]/option[1]     (note that option[] can also be 1 - 7)

У меня есть веб-страница, сохраненная на диск, и я могу зайти в html и изменить это число, затем сохранить файл, и когда я нажимаю на него, он работает.Я просто хочу иметь возможность автоматизировать это.

Любая помощь очень ценится

Idzireit

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

Пока это самый близкий у меня естьприйти на самом деле вставив значение, которое я хочу.Новый код выглядит следующим образом:

browser.execute_script("""arguments[0].setAttribute
('select', '<option selected="selected" value="nod"> &nbsp;&snbsp;draws </option>')""", get_draws)

Результаты таковы:

<option value="20" select="<option selected=&quot;selected&quot; value=&quot;nod&quot;> &amp;nbsp;&amp;snbsp;draws </option>">20&nbsp;Consecutive</option>

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

Как я могу исправить это, чтобы это выглядело так:

<option selected="selected" value="a number I am trying to change"> &nbsp;&nbsp;Draw<\option>

РЕДАКТИРОВАТЬ РЕШЕНО:

Разобрался, как изменить значение элемента.Мне пришлось изменить метод поиска этого элемента следующим образом:

get_draws = browser.find_element_by_tag_name('option')

Тогда моя следующая строка была довольно простой:

browser.execute_script("""arguments[0].setAttribute('value', '100')""", get_draws)

1 Ответ

0 голосов
/ 08 мая 2019

Для вашего второго вопроса, параметризуя значение int, попробуйте следующее:

var = 100
js = f"arguments[0].setAttribute('value', '{var}')"
browser.execute_script(js, get_draws)

Просто передайте нужное значение переменной var.

...