【问题标题】:Selenium not working? [closed]硒不起作用? [关闭]
【发布时间】:2017-05-20 09:40:46
【问题描述】:

所以最近我一直在做一个 python 项目。这是一个聊天机器人。 但是,当他们断开代码时,代码似乎就停止了。并且不继续运行。这是为什么呢?

    from selenium import webdriver
import random
import time

chrome_path = r"C:\Users\isak\Downloads\chromedriver_win32\chromedriver.exe"
with open('omegle_test_bot.txt', 'r') as words:
    read = words.read()
words = read.split('\n')

driver = webdriver.Chrome(chrome_path)
driver.get('http://www.omegle.com/')
interests = driver.find_element_by_class_name('newtopicinput')
interests.send_keys('programming\npython\nsoundcloud\nhigh\nweed\n')
time.sleep(7)
driver.find_element_by_xpath("""//*[@id="videobtn"]""").click()
time.sleep(2)
def if_disconnect():
     time.sleep(1)
     driver.find_element_by_class_name('disconnectbtn').click()
     Main()
def Main():
    while True:
        text_box = driver.find_element_by_class_name('chatmsg')
        word = random.choice(words)
        text_box.send_keys(random.choice(words))
        driver.find_element_by_class_name('sendbtn').click()

Main()
if_disconenct()

【问题讨论】:

  • 谁断开了什么?!指向导致您的问题的确切代码行
  • 是否引发异常?您可能需要将 main() 放在 try 子句下,并将 if_disconnect() 放在 except 块中。请提供您收到的任何错误消息!
  • @sytech 好吧,我有一个想法可以在网站上搜索一个仅在连接中断时才会出现的按钮。
  • @sytech 所以也许这可以工作......
  • @Andersson 当陌生人断开代码时代码停止工作

标签: python selenium bots


【解决方案1】:

问题在于您的代码无需等待即可永久发送消息:您一遍又一遍地搜索输入字段、发送键、搜索按钮、单击按钮...当您的客人断开连接时,他会触发页面刷新,并且在某个时刻您的代码无法找到输入字段或按钮并且脚本停止。您可能需要使用Explicit wait 等到您的元素可用后再尝试处理它:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

text_box = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "chatmsg")))
text_box.send_keys(random.choice(words))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "sendbtn"))).click()

还请注意,这段代码word = random.choice(words) 什么都不做(您不要在代码中使用word 变量)。

因为你的main()没有条件停止运行(不包含break),所以不可能运行if_disconect()...永远

【讨论】:

  • 但我不太明白你能在我的代码中实现该代码,这样它就可以像程序一样工作吗? (:
  • 哈哈不用了,非常感谢。我只是将它粘贴到我的代码中并且它起作用了。现在我需要了解它以及它为什么起作用(:非常感谢(:
  • 欢迎您!如果解决了您的问题,请将我的答案标记为“已接受”并带有复选标记
  • 顺便说一句:WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "sendbtn"))).click()。驱动后的 10 是什么意思?
  • 好的,谢谢(:顺便说一句,“机器人”运行良好
猜你喜欢
  • 2011-02-02
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多