首页 > 解决方案 > 用于在 textnow 上发送短信的带有 selenium 的 Python 脚本不起作用

问题描述

目前我正试图弄清楚如何创建一个可以在网站www.textnow.com上发送文本消息的脚本。我是 selenium 的新手,所以我不确定如何设置它才能正常工作。

目前我有:

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


class Textnow:  

        def __init__(self, TN_USER, TN_PASS, PHONE_NUMBER, MESSAGE):
                self.TN_USER = 'myusername'
                self.TN_PASS = 'mypassword'
                self.PHONE_NUMBER = '+17777777777'
                self.MESSAGE = 'MESSAGE'
                self.url = "https://www.textnow.com/login"

        def send_text(self):
                options = webdriver.ChromeOptions()
                            
                options.add_argument("-headless")
                #driver = webdriver.Chrome(options=options)
                driver = webdriver.Chrome('C:/Users/Myname/AppData/Local/Google/Chrome/User Data/Chrome Driver/chromedriver.exe')
                try:
                        driver.get(self.url)
                except:
                        pass
                time.sleep(8)
                print('OK')

                WebDriverWait(driver, 8).until(EC.visibility_of_element_located((By.XPATH, "//input[@name='username']")))
                uname_box = driver.find_element_by_xpath("//input[@name='username']")
                pass_box = driver.find_element_by_xpath("//input[@name='password']")
                uname_box.send_keys(self.TN_USER)
                pass_box.send_keys(self.TN_PASS)

                login_btn = driver.find_element_by_xpath("//button[@type='submit']")
                login_btn.click()

                try:
                        WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//input[@class='form_button']")))
                except:
                       pass

                got_it = driver.find_element_by_xpath("//input[@class='form_button']")
                got_it.click()

                new_text_btn = driver.find_element_by_xpath("//button[@id='newText']")
                new_text_btn.click()

                number_field = driver.find_element_by_xpath("//input[@class='newConversationTextField']")
                number_field.send_keys(self.PHONE_NUMBER)

                text_field = driver.find_element_by_xpath("//textarea[@id='message']")
                text_field.click()
                text_field.send_keys(self.MESSAGE)

                send_btn = driver.find_element_by_xpath("//div[@class='send-btn']")
                send_btn.click()


每当我运行脚本时,它似乎什么也没做。输出为空白:

Python 3.8.6rc1 (tags/v3.8.6rc1:08bd63d, Sep  7 2020, 23:10:23) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> 
= RESTART: C:\Folder Name\textsmsfolder\text_sms_edit.py
>>> 

标签: pythonseleniumselenium-webdriver

解决方案


不确定您是否将正确的链接传递给 selenium 驱动程序。但是,如果您想在网页中填写登录表单,则以下代码有效。

url = "https://www.textnow.com/login"
driver.get(url)

username_element = driver.find_element_by_id('txt-username')
username_element.send_keys('username')

password_element = driver.find_element_by_id('txt-password')
password_element.send_keys('password')

try:
    login_button = WebDriverWait(driver, 5).until(
                    EC.element_to_be_clickable((By.ID, 'btn-login')))
    login_button.click()
    
except Exception as e:
    print(e)

编辑 1

已添加代码以单击登录按钮

推荐阅读