不要這種寫(xiě), 丑寫(xiě)了, 自己都理不清層次關(guān)系, 還會(huì)被XSS
目測(cè)是一種基于js的反selenium手段, 你不能掉任何的browser.find_element。
例如:你調(diào)用browser.find_element_by_id("goInt"), 之后的所有請(qǐng)求返回值都是400。
以下是個(gè)人的理解:
selenium的find_element是向本地服務(wù)器(chromediver,解析html和js的)發(fā)送請(qǐng)求拿到數(shù)據(jù),之前看過(guò)selenium的源碼,在本地開(kāi)了一個(gè)服務(wù),通過(guò)網(wǎng)址可以直接訪問(wèn)。
提供一種其他的解決思路:
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl
import time
app = QApplication([])
view = QWebEngineView()
view.load(QUrl("http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=89&tableName=TABLE89&title=%CA%B3%C6%B7%CC%ED%BC%D3%BC%C1%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5&bcId=137403916083811026153735196207"))
view.show()
page = view.page()
def test():
page.runJavaScript("document.getElementById('goInt').value = 5")
page.runJavaScript("document.getElementById('goInt').parentNode.parentNode.childNodes[7].childNodes[0].click()")
#todo 你的爬蟲(chóng)程序
view.loadFinished.connect(test)
app.exec_()
補(bǔ)充內(nèi)容:
異步寫(xiě)法:
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl, QThread, pyqtSignal
import time
cnt = 2
app = QApplication([])
view = QWebEngineView()
view.load(QUrl("http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=89&tableName=TABLE89&title=%CA%B3%C6%B7%CC%ED%BC%D3%BC%C1%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5&bcId=137403916083811026153735196207"))
view.show()
class WorkThread(QThread):
# 定義一個(gè)信號(hào)
trigger = pyqtSignal(int)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def run(self):
time.sleep(2)
self.trigger.emit(cnt)
def output(_):
global cnt
view.page().runJavaScript('_x("http://*[@id=\\"content\\"]/table[2]/tbody/tr[1]/td/p/a")[0].text', lambda r: print(r))
if cnt < 6:
cnt += 2
work.trigger.disconnect()
work.trigger.connect(next)
work.start()
def next(id):
view.page().runJavaScript('_x("http://*[@id=\\"goInt\\"]")[0].value = %d' % id)
time.sleep(0.5)
view.page().runJavaScript('_x("http://*[@src=\\"images/dataanniu_11.gif\\"]")[0].click()')
work.trigger.disconnect()
work.trigger.connect(output)
work.start()
work = WorkThread()
work.trigger.connect(next)
def main():
view.page().runJavaScript("""
function _x(STR_XPATH) {
var xresult = document.evaluate(STR_XPATH, document, null, XPathResult.ANY_TYPE, null);
var xnodes = [];
var xres = xresult.iterateNext();
while (xres) {
xnodes.push(xres);
xres = xresult.iterateNext();
}
return xnodes;
}""")
view.page().runJavaScript('_x("http://*[@id=\\"content\\"]/div/table[2]/tbody/tr[1]/td/p/a")[0].text', lambda r: print(r))
work.start();
view.loadFinished.connect(main)
app.exec_()
結(jié)果:
控制會(huì)員注冊(cè)的顯示隱藏的變量是modal2
當(dāng)你點(diǎn)擊 已有賬號(hào) 立即登錄 時(shí)
把modal2設(shè)為false
看這個(gè)錯(cuò)誤信息很像是你的代碼里有 ES6 的箭頭函數(shù),但沒(méi)有使用 babel 進(jìn)行編譯
你這樣的話,你的請(qǐng)求放在beforeRouteEnter鉤子中,在進(jìn)入路由之前獲取數(shù)據(jù)。
可以引用,看一下路由有沒(méi)有寫(xiě)錯(cuò)
為什么最后一處是false?
Object.create創(chuàng)建了一個(gè)新的object,具體實(shí)現(xiàn)方式類(lèi)似于下面
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
折騰這么麻煩干什么呢,直接一張大寬表扔關(guān)系數(shù)據(jù)庫(kù)就好了。想要什么維度直接一條 sql 的事。
先確認(rèn)一下你的element ui是啥版本的
這個(gè)問(wèn)題是因?yàn)锳ndroid 7 / SDK 24 以上,不允許使用file://,只能用 content://來(lái)訪問(wèn)系統(tǒng)文件。解決的辦法是:在WxApplication的 onCreate 里增加以下內(nèi)容:
import android.os.Build;
import android.os.StrictMode;
super.onCreate();
if (Build.VERSION.SDK_INT>=18) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
}
...
JSON.parse(str)
webpack 加載不加載哪個(gè)文件, 與你把文件放在哪個(gè)目錄無(wú)關(guān), 與你設(shè)不設(shè)置 loader也無(wú)關(guān)。
webpack 打包的時(shí)候會(huì)靜態(tài)代碼分析:從入口文件開(kāi)始, 把你require/import的文件打包。
比如 import xx from './src/xx', 那么xx.js 將會(huì)被打包,同時(shí)會(huì)打包xx.js 里面的require/import打包。
類(lèi)似 ‘./src/xx’這種路徑,靜態(tài)分析的時(shí)候是知道文件目錄的,打包沒(méi)有問(wèn)題。 那么假如路徑里面包含變量呢? 比如
var path = ...
require('./src/' + path)
這種時(shí)候靜態(tài)分析并不能確切的知道打包src下的哪個(gè)文件。此時(shí)webpack會(huì)打包src下的所有文件。 所以題主 會(huì)看到 './src ^./.*$ ' 這樣的路徑。
webpack內(nèi)部會(huì)記錄一個(gè) 文件名與 webpack內(nèi)部地址的 map記錄。 從而在運(yùn)行的時(shí)候加載。 為了方便理解,貼一下 這種情況webpack打包之后的代碼:
(function(module, exports, __webpack_require__) {
var map = {
"./fd1": 0,
"./fd1.js": 0,
"./fd2": 1,
"./fd2.js": 1
};
function webpackContext(req) {
return __webpack_require__(webpackContextResolve(req));
};
function webpackContextResolve(req) {
var id = map[req];
if(!(id + 1)) // check for number or string
throw new Error("Cannot find module '" + req + "'.");
return id;
};
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = 4;
/***/ }),不大清楚,如果結(jié)果如你所說(shuō),可能此 內(nèi)容hash值是依據(jù)源文件依賴生成的,而不是依據(jù)打包后文件內(nèi)容生成的吧
肯定是官方的啊,這些都是有的 https://webpack.js.org/api/cli/
不知道你是否做過(guò)動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)(比如Asp.net, JSP, PHP),所有的這些網(wǎng)站技術(shù)的核心功能之一是 路由, 即根據(jù)用戶請(qǐng)求的url,程序可以設(shè)定返回的內(nèi)容,默認(rèn)對(duì)于html這類(lèi)靜態(tài)文件在服務(wù)器上的物理路徑同url請(qǐng)求路徑一致,但是這次偏偏不是,所以你才有疑問(wèn)。
網(wǎng)站程序可以劫持任何請(qǐng)求,規(guī)則通過(guò)編程設(shè)定:比如 “/simple/1.html"這種類(lèi)型路徑的請(qǐng)求,程序員設(shè)定 直接返回 某個(gè)目錄下的 simple.html文件,甚至你都可以返回一張圖片內(nèi)容給客戶端。
你接手這個(gè)項(xiàng)目,要找到url對(duì)應(yīng)的服務(wù)器文件,關(guān)鍵是去找程序中的寫(xiě)的路由映射規(guī)則??瓷先ニ鼞?yīng)該使用正則匹配的.
var a = 1就是講a定義為全局變量,你fn1()執(zhí)行的時(shí)候,fn1函數(shù)內(nèi)部,alert(a)前面并沒(méi)有定義a,就會(huì)在全局作用域中尋找a,所以第一次是alert(1),然后你的a被改為2(第二次的a也是全局的),最下面的那個(gè)alert(a)中的a就為2
沒(méi)有做過(guò) iOS 開(kāi)發(fā),不太清楚原生的細(xì)節(jié),按你的提問(wèn)應(yīng)該是能做到調(diào)用 WKwebview 里的 JS 方法了。這樣的話,可以將 React 組件的 this 作用域綁定到回調(diào)方法上,然后就可以在回調(diào)方法上訪問(wèn)組件 state 了。
例如:
function callback(data){
// 組件初始化后,通過(guò) bind 進(jìn)行綁定。然后在該方法內(nèi),this 就指向到那個(gè)組件的作用域了。
// 訪問(wèn)組件 state 傳遞數(shù)據(jù)
this.setState({ hello: data })
}
...
class someComponent extends React.Component {
constructor(){
super();
this.state = { hello: "123" }
callback = callback.bind(this);
}
...
}你做的移動(dòng)端是用rem布局嗎?一般都是兩倍圖,你給圖片設(shè)置大小就按照自己想要的大小設(shè)置就好了啊
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。