国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python使用Selenium模擬瀏覽器自動(dòng)操作功能

這篇具有很好參考價(jià)值的文章主要介紹了Python使用Selenium模擬瀏覽器自動(dòng)操作功能。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

概述

在進(jìn)行網(wǎng)站爬取數(shù)據(jù)的時(shí)候,會(huì)發(fā)現(xiàn)很多網(wǎng)站都進(jìn)行了反爬蟲的處理,如JS加密,Ajax加密,反Debug等方法,通過(guò)請(qǐng)求獲取數(shù)據(jù)和頁(yè)面展示的內(nèi)容完全不同,這時(shí)候就用到Selenium技術(shù),來(lái)模擬瀏覽器的操作,然后獲取數(shù)據(jù)。本文以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述Python搭配Tkinter和Selenium進(jìn)行瀏覽器的模擬操作,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。

什么是Selenium?

Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具,Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。Selenium支持多種操作系統(tǒng),如Windows、Linux、IOS等,如果需要支持Android,則需要特殊的selenium,本文主要以IE11瀏覽器為例。

安裝Selenium

通過(guò)pip install selenium 進(jìn)行安裝即可,如果速度慢,則可以使用國(guó)內(nèi)的鏡像進(jìn)行安裝。

涉及知識(shí)點(diǎn)

程序雖小,除了需要掌握的Html ,JavaScript,CSS等基礎(chǔ)知識(shí)外,本例涉及的Python相關(guān)知識(shí)點(diǎn)還是蠻多的,具體如下:

  • Selenium相關(guān):

Selenium進(jìn)行元素定位,主要有ID,Name,ClassName,Css Selector,Partial LinkText,LinkText,XPath,TagName等8種方式。
Selenium獲取單一元素(如:find_element_by_xpath)和獲取元素?cái)?shù)組(如:find_elements_by_xpath)兩種方式。
Selenium元素定位后,可以給元素進(jìn)行賦值和取值,或者進(jìn)行相應(yīng)的事件操作(如:click)。

  • 線程(Thread)相關(guān):

為了防止前臺(tái)頁(yè)面卡主,本文用到了線程進(jìn)行后臺(tái)操作,如果要定義一個(gè)新的線程,只需要定義一個(gè)類并繼承threading.Thread,然后重寫run方法即可。
在使用線程的過(guò)程中,為了保證線程的同步,本例用到了線程鎖,如:threading.Lock()。

  • 隊(duì)列(queue)相關(guān):

本例將Selenium執(zhí)行的過(guò)程信息,保存到對(duì)列中,并通過(guò)線程輸出到頁(yè)面顯示。queue默認(rèn)先進(jìn)先出方式。
對(duì)列通過(guò)put進(jìn)行壓棧,通過(guò)get進(jìn)行出棧。通過(guò)qsize()用于獲取當(dāng)前對(duì)列元素個(gè)數(shù)。

  • 日志(logging.Logger)相關(guān):

為了保存Selenium執(zhí)行過(guò)程中的日志,本例用到了日志模塊,為Pyhton自帶的模塊,不需要額外安裝。
Python的日志共六種級(jí)別,分別是:NOTSET,DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL,CRITICAL。

示例效果圖

本例主要針對(duì)某一配置好的商品ID進(jìn)行輪詢,監(jiān)控是否有貨,有貨則加入購(gòu)物車,無(wú)貨則繼續(xù)輪詢,如下圖所示:

Python使用Selenium模擬瀏覽器自動(dòng)操作功能,python,selenium,軟件測(cè)試,程序員,接口測(cè)試,自動(dòng)化測(cè)試,測(cè)試工程師

核心代碼

本例最核心的代碼,就是利用Selenium進(jìn)行網(wǎng)站的模擬操作,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

class Smoking:

?"""定義Smoking類"""

?# 瀏覽器驅(qū)動(dòng)

?__driver: webdriver = None

?# 配置幫助類

?__cfg_info: dict = {}

?# 日志幫助類

?__log_helper: LogHelper = None

?# 主程序目錄

?__work_path: str = ''

?# 是否正在運(yùn)行

?__running: bool = False

?# 無(wú)貨

?__no_stock = 'Currently Out of Stock'

?# 線程等待秒數(shù)

?__wait_sec = 2

?def __init__(self, work_path, cfg_info, log_helper: LogHelper):

??"""初始化"""

??self.__cfg_info = cfg_info

??self.__log_helper = log_helper

??self.__work_path = work_path

??self.__wait_sec = int(cfg_info['wait_sec'])

??# 如果小于2,則等于2

??self.__wait_sec = (2 if self.__wait_sec < 2 else self.__wait_sec)

?def checkIsExistsById(self, id):

??"""通過(guò)ID判斷是否存在"""

??try:

???i = 0

???while self.__running and i < 3:

????if len(self.__driver.find_elements_by_id(id)) > 0:

?????break

????else:

?????time.sleep(self.__wait_sec)

?????i = i + 1

???return len(self.__driver.find_elements_by_id(id)) > 0

??except BaseException as e:

???return False

?def checkIsExistsByName(self, name):

??"""通過(guò)名稱判斷是否存在"""

??try:

???i = 0

???while self.__running and i < 3:

????if len(self.__driver.find_elements_by_name(name)) > 0:

?????break

????else:

?????time.sleep(self.__wait_sec)

?????i = i + 1

???return len(self.__driver.find_elements_by_name(name)) > 0

??except BaseException as e:

???return False

?def checkIsExistsByPath(self, path):

??"""通過(guò)xpath判斷是否存在"""

??try:

???i = 0

???while self.__running and i < 3:

????if len(self.__driver.find_elements_by_xpath(path)) > 0:

?????break

????else:

?????time.sleep(self.__wait_sec)

?????i = i + 1

???return len(self.__driver.find_elements_by_xpath(path)) > 0

??except BaseException as e:

???return False

?def checkIsExistsByClass(self, cls):

??"""通過(guò)class名稱判斷是否存在"""

??try:

???i = 0

???while self.__running and i < 3:

????if len(self.__driver.find_elements_by_class_name(cls)) > 0:

?????break

????else:

?????time.sleep(self.__wait_sec)

?????i = i + 1

???return len(self.__driver.find_elements_by_class_name(cls)) > 0

??except BaseException as e:

???return False

?def checkIsExistsByLinkText(self, link_text):

??"""判斷LinkText是否存在"""

??try:

???i = 0

???while self.__running and i < 3:

????if len(self.__driver.find_elements_by_link_text(link_text)) > 0:

?????break

????else:

?????time.sleep(self.__wait_sec)

?????i = i + 1

???return len(self.__driver.find_elements_by_link_text(link_text)) > 0

??except BaseException as e:

???return False

?def checkIsExistsByPartialLinkText(self, link_text):

??"""判斷包含LinkText是否存在"""

??try:

???i = 0

???while self.__running and i < 3:

????if len(self.__driver.find_elements_by_partial_link_text(link_text)) > 0:

?????break

????else:

?????time.sleep(self.__wait_sec)

?????i = i + 1

???return len(self.__driver.find_elements_by_partial_link_text(link_text)) > 0

??except BaseException as e:

???return False

?# def waiting(self, *locator):

?#? """等待完成"""

?#? # self.__driver.switch_to.window(self.__driver.window_handles[1])

?#? Wait(self.__driver, 60).until(EC.visibility_of_element_located(locator))

?def login(self, username, password):

??"""登錄"""

??# 5. 點(diǎn)擊鏈接跳轉(zhuǎn)到登錄頁(yè)面

??self.__driver.find_element_by_link_text('賬戶登錄').click()

??# 6. 輸入賬號(hào)密碼

??# 判斷是否加載完成

??# self.waiting((By.ID, "email"))

??if self.checkIsExistsById('email'):

???self.__driver.find_element_by_id('email').send_keys(username)

???self.__driver.find_element_by_id('password').send_keys(password)

???# 7. 點(diǎn)擊登錄按鈕

???self.__driver.find_element_by_id('sign-in').click()

?def working(self, item_id):

??"""工作狀態(tài)"""

??while self.__running:

???try:

????# 正常獲取信息

????if self.checkIsExistsById('string'):

?????self.__driver.find_element_by_id('string').clear()

?????self.__driver.find_element_by_id('string').send_keys(item_id)

?????self.__driver.find_element_by_id('string').send_keys(Keys.ENTER)

????# 判斷是否查詢到商品

????xpath = "http://div[@class='specialty-header search']/div[@class='specialty-description']/div[" \

??????"@class='gt-450']/span[2] "

????if self.checkIsExistsByPath(xpath):

?????count = int(self.__driver.find_element_by_xpath(xpath).text)

?????if count < 1:

??????time.sleep(self.__wait_sec)

??????self.__log_helper.put('沒有查詢到item id =' + item_id + '對(duì)應(yīng)的信息')

??????continue

????else:

?????time.sleep(self.__wait_sec)

?????self.__log_helper.put('沒有查詢到item id2 =' + item_id + '對(duì)應(yīng)的信息')

?????continue

????# 判斷當(dāng)前庫(kù)存是否有貨

????xpath1 = "http://div[@class='product-list']/div[@class='product']/div[@class='price-and-detail']/div[" \

???????"@class='price']/span[@class='noStock'] "

????if self.checkIsExistsByPath(xpath1):

?????txt = self.__driver.find_element_by_xpath(xpath1).text

?????if txt == self.__no_stock:

??????# 當(dāng)前無(wú)貨

??????time.sleep(self.__wait_sec)

??????self.__log_helper.put('查詢一次' + item_id + ',無(wú)貨')

??????continue

????# 鏈接path1

????xpath2 = "http://div[@class='product-list']/div[@class='product']/div[@class='imgDiv']/a"

????# 判斷是否加載完畢

????# self.waiting((By.CLASS_NAME, "imgDiv"))

????if self.checkIsExistsByPath(xpath2):

?????self.__driver.find_element_by_xpath(xpath2).click()

?????time.sleep(self.__wait_sec)

?????# 加入購(gòu)物車

?????if self.checkIsExistsByClass('add-to-cart'):

??????self.__driver.find_element_by_class_name('add-to-cart').click()

??????self.__log_helper.put('加入購(gòu)物車成功,商品item-id:' + item_id)

??????break

?????else:

??????self.__log_helper.put('未找到加入購(gòu)物車按鈕')

????else:

?????self.__log_helper.put('沒有查詢到,可能是商品編碼不對(duì),或者已下架')

???except BaseException as e:

????self.__log_helper.put(e)

?def startRun(self):

??"""運(yùn)行起來(lái)"""

??try:

???self.__running = True

???url: str = self.__cfg_info['url']

???username = self.__cfg_info['username']

???password = self.__cfg_info['password']

???item_id = self.__cfg_info['item_id']

???if url is None or len(url) == 0 or username is None or len(username) == 0 or password is None or len(

?????password) == 0 or item_id is None or len(item_id) == 0:

????self.__log_helper.put('配置信息不全,請(qǐng)檢查config.cfg文件是否為空,然后再重啟')

????return

???if self.__driver is None:

????options = webdriver.IeOptions()

????options.add_argument('encoding=UTF-8')

????options.add_argument('Accept= text / css, * / *')

????options.add_argument('Accept - Language= zh - Hans - CN, zh - Hans;q = 0.5')

????options.add_argument('Accept - Encoding= gzip, deflate')

????options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko')

????# 2. 定義瀏覽器驅(qū)動(dòng)對(duì)象

????self.__driver = webdriver.Ie(executable_path=self.__work_path + r'\IEDriverServer.exe', options=options)

???self.run(url, username, password, item_id)

??except BaseException as e:

???self.__log_helper.put('運(yùn)行過(guò)程中出錯(cuò),請(qǐng)重新打開再試')

?def run(self, url, username, password, item_id):

??"""運(yùn)行起來(lái)"""

??# 3. 訪問(wèn)網(wǎng)站

??self.__driver.get(url)

??# 4. 最大化窗口

??self.__driver.maximize_window()

??if self.checkIsExistsByLinkText('賬戶登錄'):

???# 判斷是否登錄:未登錄

???self.login(username, password)

??if self.checkIsExistsByPartialLinkText('歡迎回來(lái)'):

???# 判斷是否登錄:已登錄

???self.__log_helper.put('登錄成功,下一步開始工作了')

???self.working(item_id)

??else:

???self.__log_helper.put('登錄失敗,請(qǐng)?jiān)O(shè)置賬號(hào)密碼')

?def stop(self):

??"""停止"""

??try:

???self.__running = False

???# 如果驅(qū)動(dòng)不為空,則關(guān)閉

???self.close_browser_nicely(self.__driver)

???if self.__driver is not None:

????self.__driver.quit()

????# 關(guān)閉后切要為None,否則啟動(dòng)報(bào)錯(cuò)

????self.__driver = None

??except BaseException as e:

???print('Stop Failure')

??finally:

???self.__driver = None

?def close_browser_nicely(self, browser):

??try:

???browser.execute_script("window.onunload=null; window.onbeforeunload=null")

??except Exception as err:

???print("Fail to execute_script:'window.onunload=null; window.onbeforeunload=null'")

??socket.setdefaulttimeout(10)

??try:

???browser.quit()

???print("Close browser and firefox by calling quit()")

??except Exception as err:

???print("Fail to quit from browser, error-type:%s, reason:%s" % (type(err), str(err)))

??socket.setdefaulttimeout(30)

其他輔助類

日志類(LogHelper),代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

class LogHelper:

?"""日志幫助類"""

?__queue: queue.Queue = None # 隊(duì)列

?__logging: logging.Logger = None # 日志

?__running: bool = False # 是否記錄日志

?def __init__(self, log_path):

??"""初始化類"""

??self.__queue = queue.Queue(1000)

??self.init_log(log_path)

?def put(self, value):

??"""添加數(shù)據(jù)"""

??# 記錄日志

??self.__logging.info(value)

??# 添加到隊(duì)列

??if self.__queue.qsize() < self.__queue.maxsize:

???self.__queue.put(value)

?def get(self):

??"""獲取數(shù)據(jù)"""

??if self.__queue.qsize() > 0:

???try:

????return self.__queue.get(block=False)

???except BaseException as e:

????return None

??else:

???return None

?def init_log(self, log_path):

??"""初始化日志"""

??self.__logging = logging.getLogger()

??self.__logging.setLevel(logging.INFO)

??# 日志

??rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))

??log_name = log_path + rq + '.log'

??logfile = log_name

??# if not os.path.exists(logfile):

??#? # 創(chuàng)建空文件

??#? open(logfile, mode='r')

??fh = logging.FileHandler(logfile, mode='a', encoding='UTF-8')

??fh.setLevel(logging.DEBUG) # 輸出到file的log等級(jí)的開關(guān)

??# 第三步,定義handler的輸出格式

??formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

??fh.setFormatter(formatter)

??# 第四步,將logger添加到handler里面

??self.__logging.addHandler(fh)

?def get_running(self):

??# 獲取當(dāng)前記錄日志的狀態(tài)

??return self.__running

?def set_running(self, v: bool):

??# 設(shè)置當(dāng)前記錄日志的狀態(tài)

??self.__running = v

配置類(ConfigHelper)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

class ConfigHelper:

?"""初始化數(shù)據(jù)類"""

?__config_dir = None

?__dic_cfg = {}

?def __init__(self, config_dir):

??"""初始化"""

??self.__config_dir = config_dir

?def ReadConfigInfo(self):

??"""得到配置項(xiàng)"""

??parser = ConfigParser()

??parser.read(self.__config_dir + r"\config.cfg")

??section = parser.sections()[0]

??items = parser.items(section)

??self.__dic_cfg.clear()

??for item in items:

???self.__dic_cfg.__setitem__(item[0], item[1])

?def getConfigInfo(self):

??"""獲取配置信息"""

??if len(self.__dic_cfg) == 0:

???self.ReadConfigInfo()

??return self.__dic_cfg

線程類(MyThread)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

class MyThread(threading.Thread):

?"""后臺(tái)監(jiān)控線程"""

?def __init__(self, tid, name, smoking: Smoking, log_helper: LogHelper):

??"""線程初始化"""

??threading.Thread.__init__(self)

??self.threadID = tid

??self.name = name

??self.smoking = smoking

??self.log_helper = log_helper

?def run(self):

??print("開啟線程: " + self.name)

??self.log_helper.put("開啟線程: " + self.name)

??# 獲取鎖,用于線程同步

??# lock = threading.Lock()

??# lock.acquire()

??self.smoking.startRun()

??# 釋放鎖,開啟下一個(gè)線程

??# lock.release()

??print("結(jié)束線程: " + self.name)

??self.log_helper.put("結(jié)束線程: " + self.name)

?現(xiàn)在我也找了很多測(cè)試的朋友,做了一個(gè)分享技術(shù)的交流群,共享了很多我們收集的技術(shù)文檔和視頻教程。
如果你不想再體驗(yàn)自學(xué)時(shí)找不到資源,沒人解答問(wèn)題,堅(jiān)持幾天便放棄的感受
可以加入我們一起交流。而且還有很多在自動(dòng)化,性能,安全,測(cè)試開發(fā)等等方面有一定建樹的技術(shù)大牛
分享他們的經(jīng)驗(yàn),還會(huì)分享很多直播講座和技術(shù)沙龍
可以免費(fèi)學(xué)習(xí)!劃重點(diǎn)!開源的!??!
qq群號(hào):485187702【暗號(hào):csdn11】

最后感謝每一個(gè)認(rèn)真閱讀我文章的人,看著粉絲一路的上漲和關(guān)注,禮尚往來(lái)總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!?希望能幫助到你!【100%無(wú)套路免費(fèi)領(lǐng)取】

Python使用Selenium模擬瀏覽器自動(dòng)操作功能,python,selenium,軟件測(cè)試,程序員,接口測(cè)試,自動(dòng)化測(cè)試,測(cè)試工程師

Python使用Selenium模擬瀏覽器自動(dòng)操作功能,python,selenium,軟件測(cè)試,程序員,接口測(cè)試,自動(dòng)化測(cè)試,測(cè)試工程師文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-797508.html

到了這里,關(guān)于Python使用Selenium模擬瀏覽器自動(dòng)操作功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python爬蟲之selenium模擬瀏覽器

    python爬蟲之selenium模擬瀏覽器

    之前在異步加載(AJAX)網(wǎng)頁(yè)爬蟲的時(shí)候提到過(guò),爬取這種ajax技術(shù)的網(wǎng)頁(yè)有兩種辦法:一種就是通過(guò)瀏覽器審查元素找到包含所需信息網(wǎng)頁(yè)的真實(shí)地址,另一種就是通過(guò)selenium模擬瀏覽器的方法[1]。當(dāng)時(shí)爬的是豆瓣,比較容易分析出所需信息的真實(shí)地址,不過(guò)一般大點(diǎn)的網(wǎng)站像

    2024年02月03日
    瀏覽(91)
  • selenium+python自動(dòng)化測(cè)試之使用webdriver操作瀏覽器的方法

    selenium+python自動(dòng)化測(cè)試之使用webdriver操作瀏覽器的方法

    WebDriver簡(jiǎn)介 selenium從2.0開始集成了webdriver的API,提供了更簡(jiǎn)單,更簡(jiǎn)潔的編程接口。selenium webdriver的目標(biāo)是提供一個(gè)設(shè)計(jì)良好的面向?qū)ο蟮腁PI,提供了更好的支持進(jìn)行web-app測(cè)試。從這篇博客開始,將學(xué)習(xí)使用如何使用python調(diào)用webdriver框架對(duì)瀏覽器進(jìn)行一系列的操作 打開瀏覽

    2024年01月25日
    瀏覽(28)
  • java爬蟲遇到網(wǎng)頁(yè)驗(yàn)證碼怎么辦?(使用selenium模擬瀏覽器并用python腳本解析驗(yàn)證碼圖片)

    ????????筆者這幾天在爬取數(shù)據(jù)的時(shí)候遇到了一個(gè)很鬧心的問(wèn)題,就是在我爬取數(shù)據(jù)的時(shí)候遇到了驗(yàn)證碼,而這個(gè)驗(yàn)證碼又是動(dòng)態(tài)生成的,嘗試了很多方法都沒能繞開這個(gè)驗(yàn)證碼問(wèn)題。 ? ? ? ? 我的解決方案是:使用selenium模擬瀏覽器行為,獲取到動(dòng)態(tài)生成的驗(yàn)證碼后用

    2024年02月09日
    瀏覽(175)
  • java + Selenium 實(shí)現(xiàn)自動(dòng)化測(cè)試,模擬人手點(diǎn)擊操作 chrome 瀏覽器

    引入 maven 依賴: 安裝 chromeDriver:略 SeleniumUtils.java: ChromeDriverUtils.java: 使用示例:

    2024年02月11日
    瀏覽(25)
  • Python爬蟲入門:使用selenium庫(kù),webdriver庫(kù)模擬瀏覽器爬蟲,模擬用戶爬蟲,爬取網(wǎng)站內(nèi)文章數(shù)據(jù),循環(huán)爬取網(wǎng)站全部數(shù)據(jù)。

    Python爬蟲入門:使用selenium庫(kù),webdriver庫(kù)模擬瀏覽器爬蟲,模擬用戶爬蟲,爬取網(wǎng)站內(nèi)文章數(shù)據(jù),循環(huán)爬取網(wǎng)站全部數(shù)據(jù)。

    *嚴(yán)正聲明:本文僅限于技術(shù)討論與分享,嚴(yán)禁用于非法途徑。 目錄 準(zhǔn)備工具: 思路: 具體操作: 調(diào)用需要的庫(kù): 啟動(dòng)瀏覽器驅(qū)動(dòng): 代碼主體: ?完整代碼(解析注釋): Python環(huán)境; 安裝selenium庫(kù); Python編輯器; 待爬取的網(wǎng)站; 安裝好的瀏覽器; 與瀏覽器版本相對(duì)應(yīng)的

    2023年04月24日
    瀏覽(103)
  • python用selenium模擬谷歌瀏覽器點(diǎn)頁(yè)面

    python用selenium模擬谷歌瀏覽器點(diǎn)頁(yè)面

    1、cmd安裝selenium,輸入pip?install?selenium 2、模擬點(diǎn)擊熱搜第一條進(jìn)去,連接如下 https://weibo.com/newlogin?tabtype=weibogid=102803openLoginLayer=0url=https%3A%2F%2Fweibo.com%2F 3、查看谷歌版本 ? 4、并去下面下載對(duì)應(yīng)版本的webdriver,解壓后把chromedriver.exe放入python目錄 CNPM Binaries Mirror https://regist

    2024年01月21日
    瀏覽(102)
  • python 爬蟲熱身篇 使用 requests 庫(kù)通過(guò) HTTP 讀取網(wǎng)絡(luò)數(shù)據(jù),使用 pandas 讀取網(wǎng)頁(yè)上的表格,使用 Selenium 模擬瀏覽器操作

    python 爬蟲熱身篇 使用 requests 庫(kù)通過(guò) HTTP 讀取網(wǎng)絡(luò)數(shù)據(jù),使用 pandas 讀取網(wǎng)頁(yè)上的表格,使用 Selenium 模擬瀏覽器操作

    在過(guò)去,收集數(shù)據(jù)是一項(xiàng)繁瑣的工作,有時(shí)非常昂貴。機(jī)器學(xué)習(xí)項(xiàng)目不能沒有數(shù)據(jù)。幸運(yùn)的是,我們現(xiàn)在在網(wǎng)絡(luò)上有很多數(shù)據(jù)可供我們使用。我們可以從 Web 復(fù)制數(shù)據(jù)來(lái)創(chuàng)建數(shù)據(jù)集。我們可以手動(dòng)下載文件并將其保存到磁盤。但是,我們可以通過(guò)自動(dòng)化數(shù)據(jù)收集來(lái)更有效地做

    2023年04月08日
    瀏覽(98)
  • 【python爬蟲】設(shè)計(jì)自己的爬蟲 4. 封裝模擬瀏覽器 Selenium

    有些自動(dòng)化工具可以獲取瀏覽器當(dāng)前呈現(xiàn)的頁(yè)面的源代碼,可以通過(guò)這種方式來(lái)進(jìn)行爬取 一般常用的的有Selenium, playwright, pyppeteer,考慮到他們的使用有許多相同之處,因此考慮把他們封裝到一套api中 先看基類 Selenium是一個(gè)自動(dòng)化測(cè)試工具,利用它可以驅(qū)動(dòng)瀏覽器完成特定

    2024年02月03日
    瀏覽(90)
  • [爬蟲]2.2.1 使用Selenium庫(kù)模擬瀏覽器操作

    [爬蟲]2.2.1 使用Selenium庫(kù)模擬瀏覽器操作

    Selenium是一個(gè)非常強(qiáng)大的工具,用于自動(dòng)化Web瀏覽器的操作。它可以模擬真實(shí)用戶的行為,如點(diǎn)擊按鈕,填寫表單,滾動(dòng)頁(yè)面等。由于Selenium可以直接與瀏覽器交互,所以它可以處理那些需要JavaScript運(yùn)行的動(dòng)態(tài)網(wǎng)頁(yè)。 首先,我們需要安裝Selenium庫(kù)。你可以使用pip命令來(lái)安裝:

    2024年02月16日
    瀏覽(97)
  • Selenium WebDrive使用Edge瀏覽器模擬登錄163郵箱

    ** ** 1.首先要在pycharm中下載好Selenium 2.然后下載瀏覽器驅(qū)動(dòng)這里是鏈接 (https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) *注意版本要一致 *注意放置的位置要在python3.7(這里是我用的)的更目錄下也就是找到python文件夾打開后放進(jìn)去有些資料說(shuō)要改名這里不用因?yàn)镾eleni

    2023年04月15日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包