我需要检查一个元素是否基本存在,如果确实存在,我想打开一个url然后返回到原始页面然后继续写入。我尝试了一些方法,但他们不断抛出异常。我在相关行中添加了评论。我只是想弄清楚如何实现它。
foreach (string line in File.ReadLines(@"C:\\tumblrextract\\in7.txt"))
{
if (line.Contains("@"))
{
searchEmail.SendKeys(line);
submitButton.Click();
var result = driver.FindElement(By.ClassName("invite_someone_success")).Text;
if (driver.FindElements(By.ClassName("invite_someone_failure")).Count != 0)
// If invite_someone_failure exists open this url
driver.Url = "https://www.tumblr.com/lookup";
else
// Then back to following page and continue searchEmail.SendKeys(line); submitButton.Click(); write loop
driver.Url = "https://www.tumblr.com/following";
using (StreamWriter writer = File.AppendText("C:\\tumblrextract\\out7.txt"))
{
writer.WriteLine(result + ":" + line);
}
}
}
答案 0 :(得分:0)
你正在使用selenium,你可能会在你所拥有的一些代码行中抛出异常 - 同时考虑到我不知道tumblr网站及其html结构。
但首先:
您处于foreach循环中,每次至少加载一次页面时,所有元素都会过时,所以这一行:
var searchEmail = driver.FindElement(By.Name(" follow_this"));
var submitButton = driver.FindElement(By.Name(" submit"));
可能在下一次执行中陈旧。 (ElementStaleException)。 之后粘贴它们:
driver.Url =" https://www.tumblr.com/following";
第二
使用FindElement方法时,您必须确保元素存在或者还会抛出ElementNotFoundException。
var result = driver.FindElement(By.ClassName(" invite_someone_success"))。文字;
var isThere = driver.FindElements(By.ClassName(" invite_someone_failure"));
dotNet selenium客户端有一个静态的(我相信)类可以帮助它实现预期的条件 您可以使用它来检查元素是否存在,然后再尝试阅读它的文本..
我邀请您了解硒的工作原理,特别是StaleElementReferenceException。
玩得开心。
答案 1 :(得分:0)
你得到的例外是什么?可能它可能是Null引用异常。请考虑在以下
的代码中添加Null检查if(By.ClassName("invite_someone_success") != null){
var result = driver.FindElement(By.ClassName("invite_someone_success")).Text;
}
以上未经验证/确切代码,只是伪代码