我正在尝试在网页上找到一个元素。如果我做Inspect Element,我可以看到HTML代码和XPATH,但是当我查看页面源时,只有Javascript代码。有关如何查看HTML页面的任何想法吗?
这是代码。基本上我需要找到元素并填写电子邮件和密码字段
while True:
try:
element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="email"]')))
login_id = browser.find_element_by_xpath('//*[@id="email"]')
browser.execute_script("arguments[0].setAttribute('value', 'email address')", login_id)
login_password = browser.find_element_by_xpath('//*[@id="password"]')
browser.execute_script("arguments[0].setAttribute('value', 'enter password)", login_password)
account = browser.find_element_by_id('btnLogin')
browser.execute_script("arguments[0].click();", account)
break
except Exception as e:
print('Error: Couldnt login')
答案 0 :(得分:1)
我不知道您使用execute_script的原因。您只需使用sendkeys在网页上设置值。
另一个重要的事情是HTML DOM中存在iframe,因此您需要先切换它。
以下是适用于我的java代码
DataGridView.AllowUserToAddRows
Python代码: -
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
WebElement frame = driver.findElement(By.xpath("//iframe[@title='PayPal - Log In']"));
driver.switchTo().frame(frame); //Switch to frame here
driver.findElement(By.id("email")).sendKeys("demo");
driver.findElement(By.id("password")).sendKeys("12345");
driver.findElement(By.id("btnLogin")).click();
希望它会对你有所帮助:)。
答案 1 :(得分:1)
最好等到页面完全加载,然后切换到frame.and do operations。
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
//check for complete load
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));
//需要在这里切换到iframe WebElement frame = driver.findElement(By.xpath(&#34; // iframe [@title =&#39; PayPal - 登录&#39;]&#34;)); driver.switchTo()帧(帧)。
webElment we1= driver.findElement(By.id("email"));
we1.clear();
we1.sendKeys("user@demo.com");
webElment we2=driver.findElement(By.id("password"));
we2.clear();
we2.sendKeys("12345");
driver.findElement(By.id("btnLogin")).click();
答案 2 :(得分:0)
WebElement mast_mod = driver.findElement(By.xpath(".//*[@id='header_dropdown']"));
driver.manage().timeouts().implicitlyWait(16, TimeUnit.SECONDS);
Actions menele = new Actions(driver);
menele.moveToElement(mast_mod).click().build().perform();
driver.manage().timeouts().implicitlyWait(16, TimeUnit.SECONDS);
driver.findElement(By.xpath(".//*[@id='jq-dropdown-1']/ul/li[4]")).click();
driver.findElement(By.id("email")).sendKeys("demo");
driver.findElement(By.id("password")).sendKeys("12345");
driver.findElement(By.id("btnLogin")).click();
希望这个解决方案能够帮助您。 如果这对你有帮助,请点赞。
答案 3 :(得分:0)
嗨,基督徒,你正在做的每一件事都是正确的,但在给定的网页上有一个问题,你输入用户名和密码的区域位于iframe =(iframe可以想到html页面内的html页面) .hence在执行任何操作之前,你必须先切换到那个iframe。
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "D:\\eclipseProject\\###\\src\\com\\smokealignstar\\chromedriver_win32 (1)\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-50E42369DP1388723#/checkout/login");
// A short way to identify how many iframe's are present on a web page
List<WebElement> numberOfFrames= driver.findElements(By.tagName("iframe"));
System.out.println("Total Number of iframes present are : " +numberOfFrames.size());
for(int i=0;i<numberOfFrames.size();i++){
// here u can identify iframes with any of its attribute vale say name,title or which is most suitable.
System.out.println("Name of the i-frames : " + numberOfFrames.get(i).getAttribute("name"));
}
// Back to your question - n your case given area of the web page lies inside iframe hence
// key here is before entering username and password you have to switch to the frame first
driver.switchTo().frame(driver.findElement(By.name("injectedUl")));
driver.findElement(By.id("email")).sendKeys("username working");
driver.findElement(By.id("password")).sendKeys("password working");
}
有关使用iframe的各种方式的更多信息,请转到以下网址
http://stackoverflow.com/questions/20069737/how-to-identify-and-switch-to-the-frame-in-selenium-webdriver-when-frame-does-no