python selenium 的使用——alibaba询盘

python selenium 的使用——alibaba询盘
1、使用selenium打开浏览器

    # 使用selenium打开浏览器
    options = webdriver.ChromeOptions()
    options.add_argument('--disable-extensions')
    options.add_argument('--no-sandbox')  # run Chrome use root
    options.add_argument('--disable-setuid-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--disable-gpu')
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    driver = webdriver.Chrome(options=options)
    driver.maximize_window()
    driver.get('https://www.google.com/')
    time.sleep(5)
    driver.find_element_by_css_selector("input[class='gLFyf gsfi']").send_keys("alibaba")
    driver.find_element_by_css_selector("input[class='gLFyf gsfi']").send_keys(Keys.ENTER)
    press_keys('esc')
    return driver

在这里插入图片描述
搜索结果有几个都是官网,这里取第一个

    ali_name = driver.find_elements_by_tag_name("a")
    for h in ali_name: 
        if h.get_attribute('href') == "https://www.alibaba.com/":
            h.click()
            time.sleep(3)
            press_keys('esc')
            break

在这里插入图片描述
打开官网后搜索,需要滑到底部这样就可以一次性获取到一整页的48个左右的商品链接,再滑回顶部,比较好看。
滑到底部两次,是因为第一次滑到底部可能还在加载中,所以滑两次就肯定可以到底部。

    search_name = driver.find_element_by_css_selector("input[class='ui-searchbar-keyword']")
    search_name.send_keys("wigs")
	driver.find_elements_by_css_selector("input[class='ui-searchbar-submit']")[0].click()#点搜索
    press_keys('esc')
    for n in range(20):
        driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')  # 滑到底部
        time.sleep(6)
        driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')  # 滑到底部
        time.sleep(6)
        driver.execute_script('window.scrollTo(0,0)') #滑到顶部
        time.sleep(3)

在这里插入图片描述
获取商品链接,如果需要直接打开这个链接就可以用driver.get(‘链接’),这里直接点击

product_link = driver.find_elements_by_css_selector("a[class='elements-title-normal one-line']")  # 搜索结果所有名字
print(len(product_link ))

这里用 if in 来判断我想要打开链接是否在这个页面中 ,在的话就点击它,如果不在就随机点一个,点之前跳到该商品比较好看。

        for index, d in enumerate(result_list):   # 循环整个列表
            if "https://www.alibaba.com/product-detail/Wig-Hd-Wigs-Wholesale-Hd-Bob_1600214030827.html" in d and d not in click_linklist:#判断链接是否为d,而且为没有点击过的
                time.sleep(3)
                driver.execute_script("arguments[0].scrollIntoView();", d)  # 跳到该商品
                time.sleep(3)
                d.click()
                click_linklist.append(d)
            else:
                if random.randint(2, 1000) < 3:
                    p = driver.find_elements_by_css_selector("a[class='elements-title-normal one-line']")[index]
                    driver.execute_script("arguments[0].scrollIntoView();", p)  # 跳到该商品
                    p.click()  # 随机点一个
                    driver.switch_to.window(driver.window_handles[-1])
                else:
                    continue

在这里插入图片描述
因为是在主页点开的,所以这里就生成新的窗口页面,需要切换到这里再进行操作,否则下滑等操作就是对原窗口的操作并不是对新窗口的操作了。
进入商品页面之后,下滑浏览商品详情页,然后进行询盘。

driver.switch_to.window(driver.window_handles[-1])#切换到最新的窗口是最后一个
driver.close()#关闭当前窗口
driver.switch_to.window(driver.window_handles[0])  # 切换回主页句柄
            for i in range(20):  # 详情页下滑
                driver.execute_script("window.scrollBy(0,1000)")
                time.sleep(2)
            driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_css_selector(
                "[class='content-container content-container-snoop']")) # 跳到输入框

这里就有输入框,单选框,发送按钮。这里需要注意的是单选框。

    driver.find_element_by_css_selector("[class='content-container content-container-snoop']").find_element_by_name("content").send_keys("hihihihihihihihihihihihihi")
    time.sleep(3)
    s = driver.find_elements_by_css_selector("input[class='ui-checkbox ui-checkbox-system']")[0].is_selected()
    # 是否选中状态
    if s == False:
        driver.find_elements_by_css_selector("input[class='ui-checkbox ui-checkbox-system']")[0].click()#单选框
    time.sleep(3)
    driver.find_element_by_css_selector("input[class='ui2-button ui2-button-primary ui2-button-large']").click()#发送
    time.sleep(3)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    driver.find_element_by_css_selector("li[class='sc-hd-prefix2-tab-trigger']").click()
    time.sleep(3)
    driver.find_element_by_css_selector("input[id='xjoinEmail']").send_keys("xxxxxxxxxx@gmail.com")
    time.sleep(3)
    driver.find_element_by_css_selector("input[id='xjoinPassword']").send_keys("ASDfgh123")
    time.sleep(3)
    driver.find_element_by_css_selector("input[id='xjoinFirstName']").send_keys("felixbo")
    time.sleep(3)
    driver.find_element_by_css_selector("input[id='xjoinLastName']").send_keys("man")
    time.sleep(3)
    driver.find_element_by_css_selector("span[class='sc-hd-prefix2-checkbox-customize-txt square-checkbox-box']").click()
    time.sleep(3)

滑块

    draggable = driver.find_element_by_id('nc_1__scale_text')
    # 滚动指定元素位置
    driver.execute_script("arguments[0].scrollIntoView();", draggable)
    time.sleep(2)
    ActionChains(driver).click_and_hold(draggable).perform()
    # 拖动
    ActionChains(driver).move_by_offset(xoffset=247, yoffset=0).perform()
    ActionChains(driver).release().perform()
    time.sleep(3)

在这里插入图片描述

点击登录sign in,是没有滑块的,当输入账号密码,就会有滑块。
这里需要注意的是要切进ifram,第一次切的是登录窗口的大ifram,第二次切的是滑块单独的ifram,中间是不需要切回去的,有多少个ifram,就直接切几个ifram,当最小的那个切完了,并且在ifram里的操作都完结,才需要切回原始的driver.switch_to_default_content()

    driver.find_element_by_css_selector("li[class='sc-hd-prefix2-tab-trigger']").click()
    time.sleep(1)
    driver.switch_to_frame("alibaba-login-box")	# 切换大iframe
    driver.find_element_by_css_selector("input[id='fm-login-id']").send_keys("felixboman455@gmail.com")
    time.sleep(1)
    driver.find_element_by_css_selector("input[id='fm-login-password']").send_keys("QAZwsx1987")
    time.sleep(1)
    driver.switch_to_frame("baxia-dialog-content")  # 切换小iframe
    time.sleep(1)
     # 加上滑块那段代码
    time.sleep(1)
    
    driver.find_element_by_css_selector("input[id='fm-login-submit']").click()#提交
    time.sleep(3)
    
    driver.switch_to_default_content()	# 切回原始iframe

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
关闭当前窗口,切换回主窗口

            driver.close()
            driver.switch_to.window(driver.window_handles[0])  # 切换回主页句柄

点击下一页,如果存在下一页的按钮,就点击。
判断是否有提示语,如果有则为最后一页。
在这里插入图片描述

        if 'class="seb-pagination__pages-link pages-next"' in driver.page_source:     # 点下一页
            p = driver.find_element_by_css_selector("a[class='seb-pagination__pages-link pages-next']")
            driver.execute_script("arguments[0].scrollIntoView();", p)
            p.click()
            time.sleep(3)
        else:
            break
        if " did not match any products. You may consider to:" in driver.page_source:
            break
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值