我想在选项卡中同时打开和登录5个选项卡,而不会延迟。我尝试过:
import threading
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def openurl(threadId):
print(threading.currentThread().getName(),' Thread')
url = ('https://www.facebook.com/')
print(url)
driver.execute_script("window.open('{0}')".format(url))
#driver.title(threadId)
time.sleep(0.1)
driver.set_window_size(920, 680)
driver.find_element(By.ID, "email").send_keys("xx")
driver.find_element(By.ID, "pass").send_keys("yy")
driver.find_element(By.ID, "loginbutton").click()
if __name__=='__main__':
driver = webdriver.Chrome()
windows_before = driver.current_window_handle
for i in range(5):
t1 = threading.Thread(name=i,target=openurl, args=(i,))
t1.start()
t1.join()
但它是:
Traceback(最近的最后一次调用):文件"C:\用户\1024983\AppData\本地\程序\Python\Python37\lib\threading.py",第870行,在运行自己。_target(*自己。_args,**自己。_kwargs)文件"C:\用户\1024983\AppData\本地\程序\Python\Python37\fb-thread.py",第30行,在openurldriver.find_element(By. ID,"email")。send_keys("xx")文件引发exception_class(消息,屏幕,stackTrack)selenium.common.exceptions.NoSuchElementExctive:消息:没有这样的元素:无法定位元素:{"方法":"css选择器","选择器":"[id="email"]"}(会话信息: chrome=78.0.3904.108)
如果我增加睡眠时间,标签之间就会有延迟。我试着用驾驶员导航。标题但我的案例标题对所有选项卡都是一样的。
例如,它使用线程来运行单独的浏览器,这些浏览器填写表单,并在列表按钮
中设置True
,以通知登录
按钮准备单击。当所有浏览器在列表按钮
中设置True
时,所有浏览器都单击按钮。
它似乎在同一时间运行了一段时间——也许只有系统有一些可以同时进行这么多连接。
我使用list按钮来同步所有线程。每个线程在列表中都有自己的位置。我不使用
append(True)
,因为我不确定它是否是线程安全的。
import time
from selenium import webdriver
from threading import Thread
def func(number):
driver = webdriver.Chrome()
#driver.set_window_size(920, 680)
driver.get(url)
driver.find_element_by_id("email").send_keys("xx")
driver.find_element_by_id("pass").send_keys("yy")
b = driver.find_element_by_id("loginbutton")
buttons[number] = True
print(buttons)
# wait for other buttons
while not all(buttons):
pass
print('click', number)
b.click()
# ---
url = 'https://www.facebook.com/'
number_of_threads = 5
#buttons = [False * number_of_threads] # create place
buttons = []
threads = []
for number in range(number_of_threads):
t = Thread(target=func, args=(number,)) # get number for place in list `buttons`
t.start()
threads.append(t)
buttons.append(False) # create place
for t in threads:
t.join()
编辑:与
线程相同。屏障(5)
和5个线程必须运行屏障。等待()。
import time
from selenium import webdriver
from threading import Thread, Barrier
def func(barrier):
driver = webdriver.Chrome()
#driver.set_window_size(920, 680)
driver.get(url)
driver.find_element_by_id("email").send_keys("xx")
driver.find_element_by_id("pass").send_keys("yy")
b = driver.find_element_by_id("loginbutton")
print('wait for others')
barrier.wait()
print('click')
b.click()
# ---
url = 'https://www.facebook.com/'
number_of_threads = 5
barrier = Barrier(number_of_threads)
threads = []
for _ in range(number_of_threads):
t = Thread(target=func, args=(barrier,))
t.start()
threads.append(t)
for t in threads:
t.join()
问题内容: 根据该文件的 如果是或者没有给出,将默认为机器上的处理器数量。 如果我不设置这样的值 如果我的价值很低(2),对性能是否不利?python是否已经为None值分配了所有CPU进程,而对于带有数字的值只分配了2个? 问题答案: 首先,您似乎在链接中引用了文档中错误的部分,即用于进程而不是线程的部分。在一个状态: 改变在3.5版本中:如果是还是没有给出,将默认为机器,再乘以5上的处理器数量
本文向大家介绍理解python多线程(python多线程简明教程),包括了理解python多线程(python多线程简明教程)的使用技巧和注意事项,需要的朋友参考一下 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,让你对多线程有个初步的认识。 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两
主要内容:多线程使用流程,Queue队列模型,多线程爬虫案例网络爬虫程序是一种 IO 密集型程序,程序中涉及了很多网络 IO 以及本地磁盘 IO 操作,这些都会消耗大量的时间,从而降低程序的执行效率,而 Python 提供的多线程能够在一定程度上提升 IO 密集型程序的执行效率。 如果想学习 Python 多进程、多线程以及 Python GIL 全局解释器锁的相关知识,可参考《Python并发编程教程》。 多线程使用流程 Python 提供了两个支持多线
本文向大家介绍详解Python多线程,包括了详解Python多线程的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家解析了Python多线程,供大家参考,具体内容如下 1、多线程的理解 多进程和多线程都可以执行多个任务,线程是进程的一部分。线程的特点是线程之间可以共享内存和变量,资源消耗少(不过在Unix环境中,多进程和多线程资源调度消耗差距不明显,Unix调度较快),缺点是线程之间的同步和
问题内容: 我试图理解多处理比线程的优势。我知道多处理绕过了全局解释器锁,但是还有什么其他优点,线程不能做同样的事情? 问题答案: 该模块使用线程,该模块使用进程。不同之处在于线程在相同的内存空间中运行,而进程具有单独的内存。这使得在具有多处理的进程之间共享对象更加困难。由于线程使用相同的内存,因此必须采取预防措施,否则两个线程将同时写入同一内存。这就是全局解释器锁的作用。 生成过程比生成线程
9.3.4 Python 多线程编程 很多编程语言都支持多线程编程,Python 语言亦然。与其他编程语言相比,Python 的 多线程编程是非常简单的。 Python 提供了两个支持线程的模块,一个是较老的 thread 模块,另一个是较新的 threading 模块。其中 threading 采用了面向对象实现,功能更强,建议读者使用。 thread 模块的用法 任何程序一旦开始执行,就构成了