c# - 使用 Selenium 登录到 TextNow 的问题
问题描述
我正在尝试使用 Selenium 自动化 TextNow,但是当我添加用户名和密码时,我收到错误“用户名或密码无效”。但是,手动也可以正常工作。
下面是我尝试过的代码
static void Main(string[] args)
{
IWebDriver driver;
driver = new ChromeDriver("cromepath");
driver.Url = "https://www.textnow.com/messaging";
driver.Manage().Window.Maximize();
IWebElement userName = driver.FindElement(By.Id("txt-username"));//txt-password
IWebElement password = driver.FindElement(By.Id("txt-password"));
userName.SendKeys("username");
password.SendKeys("password");
IWebElement login = driver.FindElement(By.Id("btn-login"));
login.Click();
}
解决方案
您提到您收到用户名/密码无效的错误。您确定要发送正确的凭据吗?
您的 XPath 在这里是正确的,因此等待元素存在很可能是问题——textnow.com
加载确实需要一分钟。您可能还想WebElements
在发送密钥之前清除两者。
using OpenQA.Selenium.Support.UI;
// declare wait of 15 seconds
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
// wait for element to exist, then store it in username variable
var username = wait.Until(drv => drv.FindElement(By.Id("txt-username")));
// clear & send keys
username.Clear();
username.SendKeys("username");
可以对密码重复相同的方法。
如果您仍然收到用户名/密码无效,并且您确定您使用的是正确的凭据,那么可能SendKeys()
发生得太快并且击键并未全部在input
字段中注册..
您可以包装SendKeys()
一个方法来缓慢发送密钥,以防输入太快成为问题:
public static void SlowlySendKeys(this IWebElement element, string text)
{
// first clear element
element.Clear();
// slowly send keys, wait 100ms between each key stroke
foreach (var c in text) {
element.SendKeys(c);
System.Threading.Thread.Sleep(100);
}
}
然后,您可以调用:
username.SlowlySendKeys("username");
这将减慢击键速度并解决击键发送速度过快的问题。
推荐阅读
- ag-grid - 计算不包括子行的总行数
- linux-kernel - 我的平台驱动程序的 rmmod 导致内核恐慌?
- c++ - 有没有办法在本地下载和安装私人柯南包?
- javascript - 将参数传递给点击处理程序
- python - 拥抱脸变压器模型:KeyError:BERT 模型训练开始时的“input_ids”消息
- node.js - 我们如何在自适应卡片的 Input.ChoiceSet 中拥有超过 3000 个值?
- amazon-web-services - 在 AWS S3 存储桶上解压缩一个大型的多部分(跨区)gzip 文件
- python - 如何将 --autoscaling_algorithm=NONE 标志传递给 python 代码中的数据流?
- javascript - 使用方括号表示法访问具有“n”级深度对象的嵌套对象
- visual-studio - 发布时从 3rd 方 Blazor 库中选择 wwwroot/_content/ 文件