大家好,
嘗試打開網頁的 html 代碼時,我只得到 Cookie 同意文本而不是頁面內容。
例如,在英國並試圖打開 jmp 主頁,這就是我得到的:
//:*/
Page = open("https://www.jmp.com/");
/*:
String( "<HEA... 2588="" total="" characters="" ...="">
" ) assigned.
//:*/
print (Page);
/*:
"<SCRIPT type="\!"text/javascript\!"">
function callAjax(url, fallbackUrl, callback){
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState === 4 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; xmlhttp.status === 200){
callback(xmlhttp.responseText);
}
}
xmlhttp.open(\!"GET\!", url, true);
xmlhttp.timeout = 3000; // time in milliseconds
xmlhttp.ontimeout = function() {
console.log(\!"countrycode xhr request timed out\!");
window.location.replace(fallbackUrl);
}
xmlhttp.send();
}
function findInLocales(locales, cookielocale) {
var i = 0;
var found = \!"\!";
while (i &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; locales.length &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; !found) {
if (locales[i].substring(2) === '_' + cookielocale.toLowerCase()) {
found = locales[i];
}
i++;
}
return found;
}
function geoResetURL(locales) {
var windowReplacement = window.location.href;
var regex = /\/[a-zA-Z][a-zA-Z]_[a-zA-Z][a-zA-Z]\//;
var regextest = /[a-zA-Z][a-zA-Z]_[a-zA-Z][a-zA-Z]/;
windowReplacement = windowReplacement.replace('.geo.', '.');
var match = document.cookie.match(new RegExp('(^| )usr_locale=([^;]+)'));
var cookielocale = '';
if (match != null &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; match.length &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; 2) {cookielocale = match[2];}
if (!cookielocale.match(regextest)) {
var result;
var code = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
callAjax( '/services/countrycode?'+code, windowReplacement,
function (result) {
var jsonresult = result.replace(/[()]/g, '');
cookielocale = findInLocales(locales, (JSON.parse(jsonresult)).address.country_code);
if (locales.indexOf(cookielocale) != -1) {
windowReplacement = windowReplacement.replace(regex, '/' + cookielocale + '/');
}
window.location.replace(windowReplacement);
});
} else {
if (locales.indexOf(cookielocale) != -1) {
windowReplacement = windowReplacement.replace(regex, '/' + cookielocale + '/');
}
window.location.replace(windowReplacement);
}
}
(function () {
var locales = ['en_us','en_be','de_at','zh_cn','en_dk','fr_fr','de_de','it_it','ja_jp','ko_kr','en_nl','en_ch','en_gb','en_ca','fr_ca','zh_tw','pt_br','es_mx','es_es','en_au','en_hk','en_my','en_ph','en_in','en_sg','es_ar','es_cl','es_co','es_pe'];
geoResetURL(locales);
}) ();</SCRIPT>
<P>Redirecting ...</P>
"
</HEA...>
非常感謝您提供正確方向的任何建議。
羅恩
在瀏覽器中打開開發者工具 (F12),選擇網絡選項卡並轉到 jmp.com。從那裡查看域/文件並嘗試找到“正確的”:


現在嘗試打開那個。
這種方法可能會奏效,或者至少能讓你更接近,這取決於網站和你想從那裡得到什麼。
謝謝@jthi ,
我查看了開發人員工具,但還沒有設法將其作為命令破解。
我設法得到了 html http://jmp.com/通過執行以下步驟:
1)文件>>互聯網打開>>網頁。
2) 以網頁形式打開 jmp.com

3) 以交互方式接受/不接受 cookie

4)運行以下語句:
page = open ("https://www.jmp.com/en_gb/home.html")
注意:cookie 批准僅在同一個 jmp 會話中持續。 之後不記得偏好。
這種方法在我的情況下很有用,因為在每個會話中只從一個域中獲取信息。因此,手動審批並不太難。如果腳本在獲取數據時跨越域,那麼以某種方式自動化它會很好。
這種方法也適用於我實際從中獲取數據的網頁,因此在某種程度上它是可靠的。