selenium实现京东商城首页查找元素

语言:Python

京东商城想要找到某个未加载出的元素,需要将页面加载出来。

使用js实现

流程:

1. 需要引入包:

# 引入需要的包
import time

from selenium import webdriver

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

2. 创建浏览器对象等

# 创建浏览器对象
driver = webdriver.Chrome()
url = "http://www.baidu.com"
driver.get(url)

# 窗口最大化
driver.maximize_window()

3. 定位京东商城网站,点击等操作

# 等待搜索框元素出现,使用显性等待
loc = (By.ID, 'kw')
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))

# 定位、点击元素操作,需要使用等待
jd_link = driver.find_element_by_id("kw")
jd_link.send_keys("京东商城", Keys.ENTER)
loc = (By.XPATH, '//a[contains(text(),"正品低价、品质保障")])
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()
# 窗口句柄操作
“”“
一般情况下使用最新窗口,则:
win = driver.window_handles
driver.switch_to.window(win[-1])
”“”

win = driver.window_handles
driver.switch_to.window(win[-1])


# 需要根据实际的窗口尺寸,来决定每次滚动距离,所以需要获取实际窗口尺寸
# window.outerHeight:包含工具栏和滚动条
# window.innerHeight:不包含工具栏和滚动条,仅内容可视区域

lo = (By.XPATH, '//*[@id="J_top"]/div[1]/a/h3')

# 获取当前窗口宽高: get_window_size()方法
win_size = driver.get_window_size()
# 获取当前窗口内容可视区,execute_script()方法
inner_height = driver.execute_script("
                        var a = window.innerHeight;
                        return a;        
                        ")
print("当前窗口的内容可视区域-高度:",inner_height) 

# 获取当前整个html页面的body高度。
body_height = driver.execute_script("
                        var a = document.body.scrollHeight;
                        return a;
                        ")
print("当前整个html页面的body-高度:",body_height)   

4. 不断向下滑动,直至找到目标元素

# 创建目标高度
scrolled_height = 0
new_body_height = body_height
old_body_height = 0
break_flag = False

# 循环操作,直至找到目标元素
while new_body_height != old_body_height:
    distance = int((new_body_height -scrolled_height)/ (inner_height * 0.5)) + 1
    for i in range(distance):
        # 滚动距离为 窗口内容可视区域的百分之50.可灵活配置哦!
        driver.execute_script("
                          var a = window.innerHeight;
                          window.scrollBy(0,a*0.5);
                          ")
        # 滚动一次,页面内容会更新一部分。在滚动之后,查找当前页面是否包含了它。
        # 如果没有,继续滚动。如果有,退出。
        try:
            WebDriverWait(driver, 10).until(EC.visibility_of_element_located(lo))
        except:
            pass
        else:
            print("找到啦!!!")
            driver.find_element(*lo).click()
            break_flag = True 
           # 终止for循环
            break
    if break_flag is True:  
        # 终止While循环
        break
        # time.sleep(3)
    # 更新滚动
    old_body_height = new_body_height
    scrolled_height = new_body_height
    new_body_height = driver.execute_script("
                          var a = document.body.scrollHeight;
                          return a;
                          ")
    print("老-当前整个html页面的body-高度:", old_body_height)
    print("新-当前整个html页面的body-高度:", new_body_height)

猜你喜欢

转载自www.cnblogs.com/ajiji/p/12057463.html