Использовать один и тот же веб-драйвер Selenium для нескольких действий на сайте? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь создать графический интерфейс для изменения файла Javascript на веб-сайте. Он используется для создания маркеров Leaflet без необходимости касаться кода.

Поэтому моя идея для установки заключается в том, чтобы я сначала запустил Webdriver и перешел к соответствующему файлу JavaScript в первой функции.

def start():
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    browser = webdriver.Chrome(executable_path="chromedriver")
    browser.get(---> move to the javascript file on the website)
    return browser 

Затем я хочу иметь несколько других функций, которые могут работать с текстовой областью, таких как добавление строк, удаление строк и т. Д. Проблема в том, что в других функциях мне также нужно использовать переменную browser в функции start:

def CreateMarker():
    from selenium.webdriver.common.keys import Keys
    code = code.get()
    textarea = browser.find_element_by_class_name('textarea')
    textarea.send_keys(sending some keys)
    safe, yadada etc....

В графическом интерфейсе (сделанном с помощью tkinter) у меня есть одна кнопка, связанная с функцией запуска для перехода на сайт и файл, и другая кнопка для добавления кода маркера.

Так что проблема в том, что функция createmarker не распознает переменную браузера, и когда я передаю переменную в функции CreateMarker как CreateMarker (браузер), он жалуется, что "браузер" не определен, как только я хочузапустить графический интерфейс ...

1 Ответ

0 голосов
/ 07 ноября 2019

Хорошо, я наконец-то получил все, чтобы работать так, как я хочу. Суть взлома состояла лишь в том, чтобы сделать веб-драйвер глобальной переменной и правильно вызывать его в основной функции.

Итак, теперь у меня есть две кнопки в главном графическом интерфейсе, которые выглядят так:

# Button to start the webdriver
Button(window, text = "Start", width=11, command=init.actions.start).grid(row=1, column=1, sticky=W)

# Textbox for what to write
Label (window, text='Enter text', bg="black", fg="white") .grid(row=2, column=0, sticky=W)
text = Entry(window, width=20, bg="white")
text.grid(row=3, column =0, sticky=W)

И у меня есть отдельный файл, в котором я храню все функции, связанные с кнопками. Функции для запуска веб-драйвера и записи текста в текстовое поле выглядят следующим образом:

class actions:
    def start(): 
        from selenium import webdriver
        from selenium.webdriver.common.keys import Keys
        import time
        global browser 
        browser = webdriver.Chrome(executable_path="chromedriver")
        browser.get("go to the login page")
        login = browser.find_element_by_name("USER_LOGIN")
        login.send_keys("USERNAME HERE")
        pw= browser.find_element_by_name("USER_PASSWORD")
        pw.send_keys("PASSWORD HERE")
        pw.send_keys(Keys.ENTER)
        time.sleep(5)
        browser.get("page with the file")
        return browser

    def create_code(browser, text):
        from selenium.webdriver.common.keys import Keys
        Text=text.get()
        textarea.send_keys(Text)

Итак, теперь у меня есть кнопка для инициализации веб-драйвера и отдельная кнопка для записи в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...