1.第一个脚本实现打开网页并定位元素,搜索,显示结果。
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class PythonOrgSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
def test_search_in_python_org(self):
driver = self.driver
driver.get("http://www.python.org")
self.assertIn("Python", driver.title)
elem = driver.find_element("name","q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
unittest.main()
目前能够运行。问题:大部分教程中定位元素使用的如
element = driver.find_element_by_id("passwd-id")
运行会报错如下AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'可能是By方法的问题,可以用driver.find_element("name","q")代替。
解决方法:导入By。
from selenium.webdriver.common.by import By
但是大部分教程都没有写导入By导致代码无法直接拿来运行。
现在尝试进行更多操作:点击列表,发现难以定位元素,定位后也无法点击,分别报错
Message: no such element: Unable to locate element(无法定位元素)
Message: element not interactable(无法交互)
尝试过文字定位、ID、classname等,最后使用chrome控制台中右键元素复制绝对xpath地址;无法交互是因为元素可能藏在列表、菜单中,需要先点击上一级按钮使之显现才能点击;也有可能是网页有动态效果,要加载一两秒才能展示元素,这时候可以简单地time.sleep(3)。xpath的局限就是网页稍作改变脚本就会失效。
代码:(仅作参考)
import unittest
from selenium import webdriver
class PythonOrgSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
def test_search_in_python_org(self):
driver = self.driver
driver.get("http:/")
self.assertIn("新*****台", driver.title)
driver.find_element("xpath", "/html/body/div--/div[1]/div[1]/a[1]").click()
driver.find_element("xpath", "/html/body/div--/div[1]/div[1]/div[1]/a[1]").click()
assert "No results found." not in driver.page_source
time.sleep(20)
"""def tearDown(self):
self.driver.close()"""
if __name__ == "__main__":
unittest.main()



