selenium模塊

selenium模塊

一 介紹

復制代碼
selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法直接執行JavaScript代碼的問題selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之后的結果,可支持多種瀏覽器from selenium import webdriver
browser=webdriver.Chrome()
browser=webdriver.Firefox()
browser=webdriver.PhantomJS()
browser=webdriver.Safari()
browser=webdriver.Edge()?
復制代碼

官網:http://selenium-python.readthedocs.io

二 安裝

#安裝:selenium+chromedriver
pip3 install selenium
下載chromdriver.exe放到python安裝路徑的scripts目錄中即可,注意最新版本是2.29,并非2.9
國內鏡像網站地址:http://npm.taobao.org/mirrors/chromedriver/2.29/
最新的版本去官網找:https://sites.google.com/a/chromium.org/chromedriver/downloads#驗證安裝
C:\Users\Administrator>python3
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> driver=webdriver.Chrome() #彈出瀏覽器
>>> driver.get('https://www.baidu.com')
>>> driver.page_source#注意:
selenium3默認支持的webdriver是Firfox,而Firefox需要安裝geckodriver
下載鏈接:https://github.com/mozilla/geckodriver/releases
selenium+chromedriver
#安裝:selenium+phantomjs
pip3 install selenium
下載phantomjs,解壓后把phantomjs.exe所在的bin目錄放到環境變量
下載鏈接:http://phantomjs.org/download.html#驗證安裝
C:\Users\Administrator>phantomjs
phantomjs> console.log('egon gaga')
egon gaga
undefined
phantomjs> ^C
C:\Users\Administrator>python3
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> driver=webdriver.PhantomJS() #無界面瀏覽器
>>> driver.get('https://www.baidu.com')
>>> driver.page_source
selenium+phantomjs

三 基本使用

復制代碼
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素

browser=webdriver.Chrome()
try:browser.get('https://www.baidu.com')input_tag=browser.find_element_by_id('kw')input_tag.send_keys('美女') #python2中輸入中文錯誤,字符串前加個uinput_tag.send_keys(Keys.ENTER) #輸入回車
wait=WebDriverWait(browser,10)wait.until(EC.presence_of_element_located((By.ID,'content_left'))) #等到id為content_left的元素加載完畢,最多等10秒print(browser.page_source)print(browser.current_url)print(browser.get_cookies())finally:browser.close()
復制代碼

四 選擇器

一 基本用法

#官網鏈接:http://selenium-python.readthedocs.io/locating-elements.html
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素
import timedriver=webdriver.Chrome()
driver.get('https://www.baidu.com')
wait=WebDriverWait(driver,10)try:#===============所有方法===================# 1、find_element_by_id# 2、find_element_by_link_text# 3、find_element_by_partial_link_text# 4、find_element_by_tag_name# 5、find_element_by_class_name# 6、find_element_by_name# 7、find_element_by_css_selector# 8、find_element_by_xpath# 強調:# 1、上述均可以改寫成find_element(By.ID,'kw')的形式# 2、find_elements_by_xxx的形式是查找到多個元素,結果為列表#===============示范用法===================# 1、find_element_by_idprint(driver.find_element_by_id('kw'))# 2、find_element_by_link_text# login=driver.find_element_by_link_text('登錄')# login.click()# 3、find_element_by_partial_link_textlogin=driver.find_elements_by_partial_link_text('')[0]login.click()# 4、find_element_by_tag_nameprint(driver.find_element_by_tag_name('a'))# 5、find_element_by_class_namebutton=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'tang-pass-footerBarULogin')))button.click()# 6、find_element_by_nameinput_user=wait.until(EC.presence_of_element_located((By.NAME,'userName')))input_pwd=wait.until(EC.presence_of_element_located((By.NAME,'password')))commit=wait.until(EC.element_to_be_clickable((By.ID,'TANGRAM__PSP_10__submit')))input_user.send_keys('18611453110')input_pwd.send_keys('lhf@094573')commit.click()# 7、find_element_by_css_selectordriver.find_element_by_css_selector('#kw')# 8、find_element_by_xpath
time.sleep(5)finally:driver.close()
View Code

二 xpath

#官網鏈接:http://selenium-python.readthedocs.io/locating-elements.html
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素
import timedriver=webdriver.PhantomJS()
driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')
# wait=WebDriverWait(driver,3)
driver.implicitly_wait(3) #使用隱式等待try:# find_element_by_xpath#//與/# driver.find_element_by_xpath('//body/a')  # 開頭的//代表從整篇文檔中尋找,body之后的/代表body的兒子,這一行找不到就會報錯了
driver.find_element_by_xpath('//body//a')  # 開頭的//代表從整篇文檔中尋找,body之后的//代表body的子子孫孫driver.find_element_by_css_selector('body a')#取第n個res1=driver.find_elements_by_xpath('//body//a[1]') #取第一個a標簽print(res1[0].text)#按照屬性查找,下述三者查找效果一樣res1=driver.find_element_by_xpath('//a[5]')res2=driver.find_element_by_xpath('//a[@href="image5.html"]')res3=driver.find_element_by_xpath('//a[contains(@href,"image5")]') #模糊查找print('==>', res1.text)print('==>',res2.text)print('==>',res3.text)#其他res1=driver.find_element_by_xpath('/html/body/div/a')print(res1.text)res2=driver.find_element_by_xpath('//a[img/@src="image3_thumb.jpg"]') #找到子標簽img的src屬性為image3_thumb.jpg的a標簽print(res2.tag_name,res2.text)res3 = driver.find_element_by_xpath("//input[@name='continue'][@type='button']") #查看屬性name為continue且屬性type為button的input標簽res4 = driver.find_element_by_xpath("//*[@name='continue'][@type='button']") #查看屬性name為continue且屬性type為button的所有標簽
    time.sleep(5)finally:driver.close()
View Code

三 獲取標簽屬性

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素

browser=webdriver.Chrome()browser.get('https://www.amazon.cn/')wait=WebDriverWait(browser,10)
wait.until(EC.presence_of_element_located((By.ID,'cc-lm-tcgShowImgContainer')))tag=browser.find_element(By.CSS_SELECTOR,'#cc-lm-tcgShowImgContainer img')#獲取標簽屬性,
print(tag.get_attribute('src'))#獲取標簽ID,位置,名稱,大小(了解)
print(tag.id)
print(tag.location)
print(tag.tag_name)
print(tag.size)browser.close()
獲取標簽屬性

五 等待元素被加載

#1、selenium只是模擬瀏覽器的行為,而瀏覽器解析頁面是需要時間的(執行css,js),一些元素可能需要過一段時間才能加載出來,為了保證能查找到元素,必須等待#2、等待的方式分兩種:
隱式等待:在browser.get('xxx')前就設置,針對所有元素有效
顯式等待:在browser.get('xxx')之后設置,只針對某個元素有效
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素

browser=webdriver.Chrome()#隱式等待:在查找所有元素時,如果尚未被加載,則等10秒
browser.implicitly_wait(10)browser.get('https://www.baidu.com')input_tag=browser.find_element_by_id('kw')
input_tag.send_keys('美女')
input_tag.send_keys(Keys.ENTER)contents=browser.find_element_by_id('content_left') #沒有等待環節而直接查找,找不到則會報錯
print(contents)browser.close()
隱式等待
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素

browser=webdriver.Chrome()
browser.get('https://www.baidu.com')input_tag=browser.find_element_by_id('kw')
input_tag.send_keys('美女')
input_tag.send_keys(Keys.ENTER)#顯式等待:顯式地等待某個元素被加載
wait=WebDriverWait(browser,10)
wait.until(EC.presence_of_element_located((By.ID,'content_left')))contents=browser.find_element(By.CSS_SELECTOR,'#content_left')
print(contents)browser.close()
顯式等待

六 元素交互操作

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素

browser=webdriver.Chrome()
browser.get('https://www.amazon.cn/')
wait=WebDriverWait(browser,10)input_tag=wait.until(EC.presence_of_element_located((By.ID,'twotabsearchtextbox')))
input_tag.send_keys('iphone 8')
button=browser.find_element_by_css_selector('#nav-search > form > div.nav-right > div > input')
button.click()import time
time.sleep(3)input_tag=browser.find_element_by_id('twotabsearchtextbox')
input_tag.clear() #清空輸入框
input_tag.send_keys('iphone7plus')
button=browser.find_element_by_css_selector('#nav-search > form > div.nav-right > div > input')
button.click()# browser.close()
點擊,清空
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By  # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys  # 鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait  # 等待頁面加載某些元素
import timedriver = webdriver.Chrome()
driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
wait=WebDriverWait(driver,3)
# driver.implicitly_wait(3)  # 使用隱式等待try:driver.switch_to.frame('iframeResult') ##切換到iframeResultsourse=driver.find_element_by_id('draggable')target=driver.find_element_by_id('droppable')#方式一:基于同一個動作鏈串行執行# actions=ActionChains(driver) #拿到動作鏈對象# actions.drag_and_drop(sourse,target) #把動作放到動作鏈中,準備串行執行# actions.perform()#方式二:不同的動作鏈,每次移動的位移都不同
    ActionChains(driver).click_and_hold(sourse).perform()distance=target.location['x']-sourse.location['x']track=0while track < distance:ActionChains(driver).move_by_offset(xoffset=2,yoffset=0).perform()track+=2ActionChains(driver).release().perform()time.sleep(10)finally:driver.close()
Action Chains
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素try:browser=webdriver.Chrome()browser.get('https://www.baidu.com')browser.execute_script('alert("hello world")') #打印警告
finally:browser.close()
在交互動作比較難實現的時候可以自己寫JS(萬能方法)
#frame相當于一個單獨的網頁,在父frame里是無法直接查看到子frame的元素的,必須switch_to_frame切到該frame下,才能進一步查找from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素try:browser=webdriver.Chrome()browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')browser.switch_to.frame('iframeResult') #切換到id為iframeResult的frame
tag1=browser.find_element_by_id('droppable')print(tag1)# tag2=browser.find_element_by_id('textareaCode') #報錯,在子frame里無法查看到父frame的元素browser.switch_to.parent_frame() #切回父frame,就可以查找到了tag2=browser.find_element_by_id('textareaCode')print(tag2)finally:browser.close()
補充:frame的切換

七 其他

#模擬瀏覽器的前進后退
import time
from selenium import webdriverbrowser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('http://www.sina.com.cn/')browser.back()
time.sleep(10)
browser.forward()
browser.close()
模擬瀏覽器的前進后退
#cookies
from selenium import webdriverbrowser=webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies())
browser.add_cookie({'k1':'xxx','k2':'yyy'})
print(browser.get_cookies())# browser.delete_all_cookies()
cookies
#選項卡管理:切換選項卡,有js的方式windows.open,有windows快捷鍵:ctrl+t等,最通用的就是js的方式
import time
from selenium import webdriverbrowser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')print(browser.window_handles) #獲取所有的選項卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(10)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://www.sina.com.cn')
browser.close()
選項卡管理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException,NoSuchFrameExceptiontry:browser=webdriver.Chrome()browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')browser.switch_to.frame('iframssseResult')except TimeoutException as e:print(e)
except NoSuchFrameException as e:print(e)
finally:browser.close()
異常處理

八 項目練習

#注意:網站都策略都是在不斷變化的,精髓在于學習流程。下述代碼生效與2017-11-7,不能保證永久有效
from selenium import webdriver
from selenium.webdriver import ActionChains
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 WebDriverWaitbrowser=webdriver.Chrome()try:browser.get('http://mail.163.com/')wait=WebDriverWait(browser,5)frame=wait.until(EC.presence_of_element_located((By.ID,'x-URS-iframe')))browser.switch_to.frame(frame)wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.m-container')))inp_user=browser.find_element_by_name('email')inp_pwd=browser.find_element_by_name('password')button=browser.find_element_by_id('dologin')inp_user.send_keys('18611453110')inp_pwd.send_keys('xxxx')button.click()#如果遇到驗證碼,可以把下面一小段打開注釋# import time# time.sleep(10)# button = browser.find_element_by_id('dologin')# button.click()
wait.until(EC.presence_of_element_located((By.ID,'dvNavTop')))write_msg=browser.find_elements_by_css_selector('#dvNavTop li')[1] #獲取第二個li標簽就是“寫信”了
    write_msg.click()wait.until(EC.presence_of_element_located((By.CLASS_NAME,'tH0')))recv_man=browser.find_element_by_class_name('nui-editableAddr-ipt')title=browser.find_element_by_css_selector('.dG0 .nui-ipt-input')recv_man.send_keys('378533872@qq.com')title.send_keys('圣旨')print(title.tag_name)frame=wait.until(EC.presence_of_element_located((By.CLASS_NAME,'APP-editor-iframe')))browser.switch_to.frame(frame)body=browser.find_element(By.CSS_SELECTOR,'body')body.send_keys('egon很帥,可以加工資了')browser.switch_to.parent_frame() #切回他爹send_button=browser.find_element_by_class_name('nui-toolbar-item')send_button.click()#可以睡時間久一點別讓瀏覽器關掉,看看發送成功沒有import timetime.sleep(10000)except Exception as e:print(e)
finally:browser.close()
自動登錄163郵箱并發送郵件
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素
import timedef get_goods(driver):try:goods=driver.find_elements_by_class_name('gl-item')for good in goods:detail_url=good.find_element_by_tag_name('a').get_attribute('href')p_name=good.find_element_by_css_selector('.p-name em').text.replace('\n','')price=good.find_element_by_css_selector('.p-price i').textp_commit=good.find_element_by_css_selector('.p-commit a').textmsg = '''商品 : %s鏈接 : %s價錢 :%s評論 :%s''' % (p_name,detail_url,price,p_commit)print(msg,end='\n\n')button=driver.find_element_by_partial_link_text('下一頁')button.click()time.sleep(1)get_goods(driver)except Exception:passdef spider(url,keyword):driver = webdriver.Chrome()driver.get(url)driver.implicitly_wait(3)  # 使用隱式等待try:input_tag=driver.find_element_by_id('key')input_tag.send_keys(keyword)input_tag.send_keys(Keys.ENTER)get_goods(driver)finally:driver.close()if __name__ == '__main__':spider('https://www.jd.com/',keyword='iPhone8手機')
爬取京東商城商品信息
作業:爬取亞馬遜iphone手機的商品信息爬取天貓python書籍的商品信息爬取京東小米手機的商品信息

?

轉載于:https://www.cnblogs.com/liuchengdong/p/8303094.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390331.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關閉iphone來電mac_如何在Mac和iPhone上關閉通用剪貼板切換(以及為什么要禁用此功能)

關閉iphone來電macIm about to tell you something that will shock you, and probably make you very angry. I hope you wont hate me for it. Here goes.我正要告訴您一些令您震驚的事情&#xff0c;并可能使您非常生氣。 我希望你不會為此而恨我。 開始。 If you are an i…

關于tomcat Post 數據參數的問題

2019獨角獸企業重金招聘Python工程師標準>>> POST請求本身并未限制傳入參數大小&#xff0c;是tomcat 容器設置了接收參數大小的限制。修改server.xml <Connector port"8080" protocol"HTTP/1.1" connectionTimeout"2000" red…

iOS:通信錄(完成)(18-01-18更)

1、讀取通信錄 1&#xff09;、9.0以前&#xff1a;AddressBook 2&#xff09;、9.0以后&#xff1a;Contacts 2、調用通信錄UI&#xff08;不弄&#xff09; 1&#xff09;、9.0以前&#xff1a;AddressBookUI 2&#xff09;、9.0以后&#xff1a;ContactsUI 3、參考 0、寫在前…

如何在React Native和Firebase中設置Google登錄

Google sign-in is a great login feature to offer to your apps users. It makes it easier for them to create an account and sign in. Google登錄是一項出色的登錄功能&#xff0c;可為您的應用程序用戶提供。 這使他們更容易創建帳戶并登錄。 And whats even better, F…

設計模式-發布訂閱模式

這段時間在看vue的雙向綁定原理&#xff0c;知道了vue的核心三大件&#xff1a;Observer, Complie, Watcher。 Observer用于監聽屬性的變化&#xff0c;如有變動就通知 Watcher。 Compile負責解析元素節點的指令&#xff0c;如v-if&#xff0c;v-bind之類, 進行數據和回調函數的…

杜教篩--51nod1239 歐拉函數之和

求$\sum_{i1}^{n}\varphi (i)$&#xff0c;$n\leqslant 1e10$。 這里先把杜教篩的一般套路貼一下&#xff1a; 要求$S(n)\sum_{i1}^{n}f(i)$&#xff0c;而現在有一數論函數$g(i)$&#xff0c;$g(i)$的前綴和很無腦&#xff0c;且$f$和$g$的狄利克雷卷積的前綴和很無腦&#xf…

【Android Studio安裝部署系列】目錄

概述 從剛開始使用Android Studio到現在&#xff0c;下面所有目錄下的操作&#xff0c;當時習慣性的把每一個整理成一個文檔&#xff08;其實就是簡單文字描述截圖&#xff09;&#xff1b;有些地方當時是一知半解&#xff0c;現在會稍微明白一些。正好趕上現在有時間。所以就想…

修改npm全局安裝模式的路徑

修改npm全局安裝模式的路徑 在正式寫此文章之前&#xff0c;我得說一點血淚史。 剛學nodeJS不久&#xff0c;很納悶為什么全局安裝的模塊在 node安裝目錄/node_modules‘ 中沒找到&#xff01;后來仔細看了下安裝成功后的信息&#xff0c;才發現原來是自動安裝在C盤了&#xff…

javascript創建類_如何使用JavaScript創建吹氣效果

javascript創建類Have you ever wondered how you can create a realistic air blowing effect with JavaScript? Like the one shown on the evening TV shows, where multiple balls are being mixed up in a sphere-like object by leveraging air pressure? If you want …

Bootstrap 4:如何使頂部固定的Navbar保持在容器中而不拉伸?

There are many ways to make a fixed navbar stay inside a parents div container. Well go over the most straightforward one here.有很多方法可以使固定的導航欄停留在父級的div容器中。 我們將在這里介紹最簡單的方法。 Imagine you have the following code, modified…

基于SpringBoot+Mybatis+Thymeleaf商品信息管理系統

github地址&#xff1a;github.com/zaiyunduan1…,如果對你有幫助&#xff0c;歡迎Star 主要用到的技術&#xff1a; 使用maven進行項目構建使用SpringbootMybatis搭建整個系統使用Thymeleaf模板技術實現頁面靜態化使用框架Bootstrap、JQuery開發前端界面使用MySQL和MongoDB分別…

在Mac上為自己手動編譯安裝一套PHP7的開發環境

首先你得去官網下載php7 beta1的版本 這里由于我是在mac上安裝&#xff0c;所以就去下載linux相關的版本&#xff0c;地址也直接附上了php7 beta1windows版的官方也有發布詳情猛戳&#xff1a;這里 解壓安裝包&#xff0c;進入源代碼目錄 tar -zxvf php-7.0.0beta1.tar.gz cd p…

卡特蘭數 HDU2067 HDU4165 HDU1134

題目鏈接&#xff1a;https://vjudge.net/problem/HDU-2067 小兔的棋盤 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11800 Accepted Submission(s): 5952 Problem Description小兔的叔叔從外面旅游回來給她…

Python的用途是什么? Python編程語言有10多種編碼用途。

&#x1f44b;歡迎 (&#x1f44b; Welcome) Hi! Please take a moment to think about this question: 嗨&#xff01; 請花一點時間考慮這個問題&#xff1a; How is Python applied in real-world scenarios? Python如何在實際場景中應用&#xff1f; If you are learnin…

Publish/Subscribe

Publish/Subscribe 我們將會投遞一個消息給多個消費者&#xff0c;這種模式被稱為“publish/subscribe” 通俗的講&#xff0c;前面的是點對點隊列模型&#xff0c;現在講的是發布訂閱模型。 Exchanges producer&#xff1a;一個發送消息的用戶應用程序 queue&#xff1a;一個存…

[轉]在ROS下使用zeroconf配置多機通信

原文地址&#xff1a;http://www.corvin.cn/635.html&#xff0c;轉載主要方便隨時查閱&#xff0c;如有版權要求&#xff0c;請及時聯系。 0x00 為何需要配置ROS多機通信 眾所周知ROS是分布式系統&#xff0c;因此可以將機器人需要處理的復雜、計算量大的任務分解在多臺機器上…

python中斐波那契數列_斐波那契數列–在Python,JavaScript,C ++,Java和Swift中進行了解釋...

python中斐波那契數列by Pau Pavn通過保羅帕文(PauPavn) The Fibonacci sequence is, by definition, the integer sequence in which every number after the first two is the sum of the two preceding numbers. To simplify:根據定義&#xff0c;斐波那契數列是整數序列&a…

1583. 統計不開心的朋友

1583. 統計不開心的朋友 給你一份 n 位朋友的親近程度列表&#xff0c;其中 n 總是 偶數 。 對每位朋友 i&#xff0c;preferences[i] 包含一份 按親近程度從高到低排列 的朋友列表。換句話說&#xff0c;排在列表前面的朋友與 i 的親近程度比排在列表后面的朋友更高。每個列…

uva 247(floyd傳遞閉包)

為什么&#xff0c;逗號后面&#xff0c;還有空格........ #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> #include <map> using namespace std; const int maxn50; int d[maxn][max…

VS Code 的常用快捷鍵和插件

注:文章摘自 風行天下一萬號 - 博客園 vs code 的常用快捷鍵 1、注釋&#xff1a; 單行注釋&#xff1a;[ctrlk,ctrlc] 或 ctrl/取消單行注釋&#xff1a;[ctrlk,ctrlu] (按下ctrl不放&#xff0c;再按k u)多行注釋&#xff1a;[altshiftA]多行注釋&#xff1a;/**2、移動行&a…