当前位置: 首页 > 知识库问答 >
问题:

Python硒多线程

顾靖
2023-03-14

我想在选项卡中同时打开和登录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)

如果我增加睡眠时间,标签之间就会有延迟。我试着用驾驶员导航。标题但我的案例标题对所有选项卡都是一样的。

共有1个答案

虞航
2023-03-14

例如,它使用线程来运行单独的浏览器,这些浏览器填写表单,并在列表按钮中设置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 模块的用法 任何程序一旦开始执行,就构成了