嘘~ 正在从服务器偷取页面 . . .

工欲善其事,必先利其器 —— selenium模块(2)


selenium 自动化操作(1)(以百度翻译为例)

from selenium import webdriver

if __name__ == '__main__':
    bro = webdriver.Chrome(executable_path = "chromedriver.exe")

    # 发起请求
    bro.get('https://fanyi.baidu.com/')

我们运行程序发现我们使用 selenium 请求到的网页和我们自己打开的网页有一点不同。

使用 selenium 请求到的网页多了一个页面窗口。

那么我们要怎么使用 selenium 关闭这个窗口呢?

我们可以使用元素的 xpath 路径,元素的 id 名,或者说元素的属性定位到关闭的符号,并且使用 click() 方法模拟鼠标的点击。

这是定位元素的一些方法

# 使用 class 属性定位到 “x” 符号
    btn = bro.find_element_by_class_name('desktop-guide-close')

    # 模拟鼠标点击
    btn.click()

注意:
如果报错,很有可能是还没加载完成,可以使用 time.sleep() 让页面完成加载

接下来我们就看到页面来到我们熟悉的页面


那么我们要怎么把我们想要翻译的文字输入到文本框中呢?

还是先定位到文本框的位置,再输入文字(使用 send_keys() 方法),点击翻译

# 定位到文本框
    translate_input = bro.find_element_by_id('baidu_translate_input')

    # 传入文字
    translate_input.send_keys("奥特曼")
    # 等待两秒
    sleep(2)

结果如图


因为是动态加载的数据,所以我们不需要点击 “ 翻译 ”,结果就会自动出现。如果需要点击,我们也可以先定位按键的位置,再模拟点击。

那么我们要如何获取翻译的结果呢?

我们知道动态加载的数据需要找到相应的 API,那么现在我们需要吗?答案是不需要,我们只需要对现在的页面进行 xpath 解析就行。

代码如下:

from lxml import etree

……

# 获取此时的页面源码
    page = bro.page_source

    # xpath 解析
    tree = etree.HTML(page)
    content = tree.xpath('//*[@id="main-outer"]/div/div/div[1]/div[2]/div[1]/div[2]/div/div/div[1]/p[2]/span/text()')

    print(content)

    bro.quit()

结果如下


文章作者: New Ass
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 New Ass !
  目录