как сделать этот код более эффективным с селеном и питоном - PullRequest
0 голосов
/ 03 октября 2018

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

from selenium import webdriver
import time
import os, re
import psutil
import signal

print("*" * 60)
print("LOL soul clicker")

print("*" * 60)


with open("working.txt", "r" ,encoding ="utf-8") as data:

    text=data.readlines()
data.close()

browser = webdriver.Firefox()

def workclick(proxy, proxy_port):
    target_website = "https:www.website.com"

    proxy_profile = webdriver.FirefoxProfile()

    proxy_profile.set_preference("network.proxy.type", 1)

    proxy_profile.set_preference("network.proxy.http", proxy )

    proxy_profile.set_preference("network.proxy.http_port", proxy_port)

    proxy_profile.set_preference("network.proxy.ssl", proxy )

    proxy_profile.set_preference("network.proxy.ssl_port", proxy_port)

    browser = webdriver.Firefox(firefox_profile=proxy_profile)

    target_website = browser.get(target_website)
    time.sleep(6)
    target_website.find_element_by_xpath('/html/body/div[7]/div[2]   /div[1]').click()
target_website.find_element_by_xpath('/html/body/div[5]/div[2]/div[1]').click()
target_website.find_element_by_xpath('/html/body/div[1]/div/div/div[1]/div[2]/div/div/div[1]/div/div[1]/article/div[1]/div/div[2]/a/i').click()


    browser.close()
def getpid():
    x = ""
    pn = "geckodriver.exe"
    for proc in psutil.process_iter():
        if proc.name() == pn:
            x=int(str(proc).split(",")[0].split("=")[1])

    try:
        os.kill(x, signal.SIGTERM)
    except:
        os.kill(x, signal.SIGTERM)


k = len(text)
print(k)
for i in text:
    try:
        proxy, proxy_port = i.split(":")
        proxy = str(proxy)
        proxy_port = int(proxy_port)
        workclick(proxy, proxy_port)
        time.sleep(60)
        getpid()

        print(f"Success : {proxy}  {k}")

        k=k-1
    except:
        print(f"Failed : {proxy}    {k}")
        k=k-1
        getpid()

, поэтому я пытаюсь просто отладить код по частям в режиме ожидания, но я не могу из-за любви ко мне, кажется, заставить код работать правильно.В основном, я хочу иметь возможность нажимать на кнопку через прокси несколько раз

, поэтому я был бы очень признателен за максимально возможную помощь в настройке и запуске этого сценария наилучшим и наиболее эффективным способом, насколько это возможно, спасибо всем,

1 Ответ

0 голосов
/ 03 октября 2018

Мои первые советы,

Во-первых, не используйте sleep (), используйте методы wait before.Это делает ваши тесты более стабильными, потому что sleep (6) ждет 6 секунд каждый раз, и это может вызвать проблемы с синхронизацией, а также, если элементы не появляются в это время, ваш код завершится ошибкой.(https://selenium -python.readthedocs.io / waits.html )

После этого вы можете использовать browser.quit () вместо browser.close ().

В-третьих, если вы улучшите этот код, попробуйте поработать с собственными библиотеками.Вы можете написать собственные методы, которые включают в себя то, что вы хотите, а затем импортировать их в свои тестовые файлы как пользовательскую библиотеку.

Например: вы можете создать скрипт SetProxy.py и определить прокси в этом файле как пользовательскую функцию.затем вызовите их в тестовые функции.Это будет более легким в обслуживании, когда ваш код расширяется.

...