如何使用 selenium 和 python 使这段代码更高效
how to make this code more efficient with selenium and python
你好我写了下面的代码来访问一个网站抛出一个代理并点击一个按钮然后关闭浏览器并重复关于集但是使用不同的代理。但是浏览器没有关闭,所以有一个建立浏览器。
这是代码:
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()
所以我尝试简单地在闲置时逐段调试代码,但我不能因为我的爱而使代码正常工作。基本上我希望能够通过代理多次单击按钮
所以我非常感谢尽可能多的帮助来启动这个脚本,运行 尽可能最好和最有效的方法谢谢大家。
我的第一个建议,
首先,不要使用 sleep() ,使用 wait until 方法。它使您的测试更加稳定,因为 sleep(6) 每次都等待 6 秒,这可能会导致计时问题,而且如果此时没有出现元素,您的代码将失败。 (https://selenium-python.readthedocs.io/waits.html)
之后您可以使用 browser.quit() 而不是 browser.close()。
第三,如果您要改进此代码,请尝试使用您自己的库。您可以编写包含所需内容的自定义方法,然后将它们作为自定义库导入到您的测试文件中。
例如:
您可以创建 SetProxy.py 脚本并将此文件中的代理定义为自定义函数,然后将它们调用到测试函数中。当您的代码扩展时,它将更易于维护。
你好我写了下面的代码来访问一个网站抛出一个代理并点击一个按钮然后关闭浏览器并重复关于集但是使用不同的代理。但是浏览器没有关闭,所以有一个建立浏览器。 这是代码:
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()
所以我尝试简单地在闲置时逐段调试代码,但我不能因为我的爱而使代码正常工作。基本上我希望能够通过代理多次单击按钮
所以我非常感谢尽可能多的帮助来启动这个脚本,运行 尽可能最好和最有效的方法谢谢大家。
我的第一个建议,
首先,不要使用 sleep() ,使用 wait until 方法。它使您的测试更加稳定,因为 sleep(6) 每次都等待 6 秒,这可能会导致计时问题,而且如果此时没有出现元素,您的代码将失败。 (https://selenium-python.readthedocs.io/waits.html)
之后您可以使用 browser.quit() 而不是 browser.close()。
第三,如果您要改进此代码,请尝试使用您自己的库。您可以编写包含所需内容的自定义方法,然后将它们作为自定义库导入到您的测试文件中。
例如: 您可以创建 SetProxy.py 脚本并将此文件中的代理定义为自定义函数,然后将它们调用到测试函数中。当您的代码扩展时,它将更易于维护。