selenium缓慢下拉加定位下拉

self.browser.get(self.INDEX_URL)
js = "return action=document.body.scrollHeight"
height = 0
new_height = self.browser.execute_script(js)

while height < new_height:
   # 将滚动条调整至页面底部
    for i in range(height, new_height, 100):
        self.browser.execute_script('window.scrollTo(0, {})'.format(i))
        time.sleep(0.05)
    height = new_height
    time.sleep(1)
    new_height = self.browser.execute_script(js)

html = self.browser.page_source
self.get_data(html)

当页面有多个下拉框的时候,使用定位元素下拉的方式,这时候的window.scrollTo是不能用的

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from loguru import logger
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import random
import re
from urllib.parse import quote
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
chrome_path = r'F:\PythonProject\data-auto\ProjectSetting\chromedriver.exe'

driver = webdriver.Chrome(executable_path=chrome_path)
driver.get("https://www.baidu.com/s?wd=data&rsv_spt=1&rsv_iqid=0x96412e19001eb086&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=3&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=956&rsv_sug4=1595")

# 定位目标元素
# target_element = driver.find_element_by_xpath('//div[@class="cr-content new-pmd "]')
wait = WebDriverWait(driver, 20, 0.01)
target_element = wait.until(EC.presence_of_element_located((
            By.XPATH, '//div[@class="cr-content new-pmd "]'
)))

scroll_position = target_element.location["y"]
scroll_script = """
    function smoothScrollTo(element, duration) {
        const startY = window.pageYOffset;
        const targetY = element.getBoundingClientRect().top + window.pageYOffset;
        const diff = targetY - startY;
        const scrollStep = 50;  // 修改滚动的像素数
        const pauseTime = 50;   // 修改停顿的时间间隔
        let count = 0, curPos;

        function scroll() {
            if (Math.sign(diff) === 1 && count < diff) {
                count += scrollStep * Math.sign(diff);
                curPos = startY + count;
                if (curPos > targetY) {
                    curPos = targetY;
                }
                window.scrollTo(0, curPos);
                setTimeout(scroll, pauseTime);
            }
        }

        scroll();
    }

    // 调用滚动函数,滚动到目标位置
    smoothScrollTo(arguments[0], arguments[1]);
"""
driver.execute_script(scroll_script, target_element, scroll_position)

当上面的实现不成功之后,利用终极大法:
直接定位所有的li,然后下拉循环

links = wait.until(
EC.presence_of_all_elements_located((
  By.XPATH, '//li[@class="artdeco-list__item pl3 pv3 "]'
))
)

for lk in range(len(links)):
	browser.execute_script("arguments[0].scrollIntoView({behavior: 'smooth'});", links[lk])
	time.sleep(0.04)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
selenium可以使用Select类来处理下拉列表。这个类提供了一些常用的方法用于与下拉列表进行交互。可以通过导入`selenium.webdriver.support.ui.Select`来使用Select类。在页面中,如果有`<select></select>`标签,那么就代表该元素是一个下拉菜单。可以使用Select类的方法来选择下拉菜单中的选项,比如可以使用`select_by_index(index)`方法来根据选项的索引进行选择,也可以使用`select_by_value(value)`方法根据选项的value属性值进行选择,还可以使用`select_by_visible_text(text)`方法根据选项的可见文本进行选择。这些方法可以根据具体需要来选择下拉菜单中的选项。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Selenium下拉框操作详解](https://blog.csdn.net/weixin_50829653/article/details/129930261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Selenium基础 — Selenium操作下拉菜单](https://blog.csdn.net/m0_59868866/article/details/127349744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值