我正在尝试登录Youtube以通过我的视频获利,但它不会登录。我已经检查了元素是否存在,当它到达代码时单击它确实存在的按钮但似乎没有点击它:
我的代码:
IWebDriver driver = new PhantomJSDriver();
driver.Navigate().GoToUrl("https://www.youtube.com/my_videos?o=U");
// Fill in the email field
Thread.Sleep(1000);
driver.FindElement(By.Id("identifierId")).SendKeys(Email);
Thread.Sleep(1000);
driver.FindElement(By.Id("identifierNext")).Click();
Thread.Sleep(1000);
// Fill out the password field
driver.FindElement(By.Name("password")).SendKeys(Password);
driver.FindElement(By.XPath("//*[@id=\"passwordNext\"]")).Click();
Thread.Sleep(10000);
//Select the channel if we have more than 1
driver.FindElement(By.XPath("//span[.='" + Name + "']")).Click();
// Select all videos
driver.FindElement(By.XPath("//*[@id=\"non-appbar-vm-video-actions-bar\"]/div/span[2]/input")).Click();
Thread.Sleep(1000);
// Click the More button
driver.FindElement(By.XPath("//*[@id=\"non-appbar-vm-video-actions-bar\"]/div/div[1]/button")).Click();
Thread.Sleep(1000);
// Click Monotime link
driver.FindElement(By.XPath("//*[starts-with(@id, 'aria-menu-id')]/descendant::button/span[text()='Monetise']")).Click();
Thread.Sleep(1000);
// Monetize the video
driver.FindElement(By.XPath("//*[@id=\"body-container\"]/div[5]/div/div/div[1]/div[2]/span/div/div[2]/div[2]/button[2]")).Click();
Thread.Sleep(20000);
//Close browser
driver.Dispose();
driver.Quit();
driver.Close();
我收到错误:
如果我使用FirefoxDriver,上面的代码可以工作,但是使用PhantomJS无效。
如何点击Google的“下一步”按钮?
按钮的html:
<div role="button" id="identifierNext" class="O0WRkf zZhnYe e3Duub C0oVfc Zp5qWd Hj2jlf qs41qe M9Bg4d" jscontroller="VXdfxd" jsaction="click:cOuCgd; mousedown:UX7yZ; mouseup:lbsD7e; mouseenter:tfO1Yc; mouseleave:JywGue;touchstart:p6p2H; touchmove:FwuNnf; touchend:yfqBxc(preventMouseEvents=true|preventDefault=true); touchcancel:JMtRjd;focus:AHmuwe; blur:O22p3e; contextmenu:mg9Pef;" jsshadow="" jsname="tJiF1e" aria-disabled="false" tabindex="0">
<div class="Vwe4Vb MbhUzd" jsname="ksKsZd" style="top: 18px; left: 44px; width: 88px; height: 88px;"></div>
<div class="ZFr60d CeoRYc"></div>
<content class="CwaK9"><span class="RveJvd snByac">Next</span></content>
</div>
我也尝试过,没有运气:
TimeSpan ts = TimeSpan.FromSeconds(5);
IWebDriver driver = new PhantomJSDriver();
WebDriverWait wait = new WebDriverWait(driver, ts);
driver.Navigate().GoToUrl("https://www.youtube.com/my_videos?o=U");
// Fill in the email field
IWebElement web = wait.Until(ExpectedConditions.ElementExists(By.Id("identifierId")));
web.SendKeys(Email);
IWebElement nxt = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id=\"identifierNext\"]/content/span")));
nxt.Click();
driver.TakeScreenshot().SaveAsFile("screenshot.png", ImageFormat.Png);
// Fill out the password field
wait.Until(ExpectedConditions.ElementToBeClickable(By.Name("password"))).SendKeys(Password);
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id=\"passwordNext\"]"))).Click();
driver.TakeScreenshot().SaveAsFile("screenshot2.png", ImageFormat.Png);
//Select the channel if we have more than 1
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//span[.='" + Name + "']"))).Click();
// Select all videos
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id=\"non-appbar-vm-video-actions-bar\"]/div/span[2]/input"))).Click();
// Click the More button
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id=\"non-appbar-vm-video-actions-bar\"]/div/div[1]/button"))).Click();
// Click Monotime link
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[starts-with(@id, 'aria-menu-id')]/descendant::button/span[text()='Monetise']"))).Click();
// Monetize the video
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id=\"body-container\"]/div[5]/div/div/div[1]/div[2]/span/div/div[2]/div[2]/button[2]"))).Click();
//Close browser
driver.Dispose();
driver.Quit();
driver.Close();
答案 0 :(得分:0)
根据您提供的HTML,我会尝试点击<span>
代替:
driver.FindElement(By.XPath("//*[@id=\"identifierNext\"]/content/span")).Click();
除此之外:您可能会看到new Google sign-in page的效果。
答案 1 :(得分:0)
就我而言,我发现如果您更改其他内容(例如Chrome浏览器的用户代理)的用户代理值,您就可以点击Google登录体验的“下一步”按钮PhantomJS网络驱动程序。
phantomJsOptions.AddAdditionalCapability("phantomjs.page.settings.userAgent"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/60.0.3112.113 Safari/537.36");
似乎可以根据浏览器的用户代理以不同方式呈现JavaScript。