Необходимо вытащить поле ems(стоимость доставки почтой). Примеры страниц. http://item.taobao.com/item.htm?id=2707659755 http://item.taobao.com/item.htm?id=5247635387 http://item.taobao.com/item.htm?id=5248514025 Вот собственно как это выглядит в html коде. <em id="J_PostageList">快递: 12.0元 EMS: 50.0元</em> Проблема в том что данная информация вставляется javascriptoм после прогрузки страницы, т.е. когда я пытаюсь вытащить html код с помощью curl или file_get_contents, то там нет нужной строки. У кого какие есть идеи. Либо как-то попытаться вывести формулу. EMS рассчитывается за счет веса, но для товаров нет веса на страничке.
Ну дак разбери, как именно подставляется. Плагины по отладке тебе в помощь. Когда разберешься, то из скрипта напрямую обращайся. Я не буду разбираться с тем, как и что там происходит, мне просто в лом, и так японский уже видеть не могу. Так что дерзай. Ватари маста ка?
Бог в помощь, я уже этот код анализировал. Это только часть отвечающая за нужный элемент, могу выдать весь код. Это проблема сложная, для тех кому интересно подумать, а не отвечать на вопросы нубов. [js]TB.Detail.PostageFee = function () { var ORDINARY = "1", FAST = "2", EMS = "7", CORPFAST = "4", POSTFAST = "5"; var MODE_ARRAY = [ORDINARY, EMS, CORPFAST, POSTFAST]; var MODENAME_MAP = {}; MODENAME_MAP[ORDINARY] = "\u5e73\u90ae"; MODENAME_MAP[CORPFAST] = "\u5feb\u9012\u516c\u53f8"; MODENAME_MAP[POSTFAST] = "\u90ae\u653f\u5feb\u9012"; MODENAME_MAP[EMS] = "EMS"; var NATIONWIDE_CODE = "1"; var DEST_MAP = { "1": "\u5168\u56fd", "110000": "\u5317\u4eac", "120000": "\u5929\u6d25", "130000": "\u6cb3\u5317", "140000": "\u5c71\u897f", "150000": "\u5185\u8499\u53e4", "210000": "\u8fbd\u5b81", "220000": "\u5409\u6797", "230000": "\u9ed1\u9f99\u6c5f", "310000": "\u4e0a\u6d77", "320000": "\u6c5f\u82cf", "330000": "\u6d59\u6c5f", "340000": "\u5b89\u5fbd", "350000": "\u798f\u5efa", "360000": "\u6c5f\u897f", "370000": "\u5c71\u4e1c", "410000": "\u6cb3\u5357", "420000": "\u6e56\u5317", "430000": "\u6e56\u5357", "440000": "\u5e7f\u4e1c", "450000": "\u5e7f\u897f", "460000": "\u6d77\u5357", "500000": "\u91cd\u5e86", "510000": "\u56db\u5ddd", "520000": "\u8d35\u5dde", "530000": "\u4e91\u5357", "540000": "\u897f\u85cf", "610000": "\u9655\u897f", "620000": "\u7518\u8083", "630000": "\u9752\u6d77", "640000": "\u5b81\u590f", "650000": "\u65b0\u7586", "710000": "\u53f0\u6e7e", "810000": "\u9999\u6e2f", "820000": "\u6fb3\u95e8", "990000": "\u6d77\u5916" }; var DEST_MAP_UTF8 = { "1": "\u5168\u570b", "110000": "\u5317\u4eac", "120000": "\u5929\u6d25", "130000": "\u6cb3\u5317", "140000": "\u5c71\u897f", "150000": "\u5167\u8499\u53e4", "210000": "\u907c\u5be7", "220000": "\u5409\u6797", "230000": "\u9ed1\u9f8d\u6c5f", "310000": "\u4e0a\u6d77", "320000": "\u6c5f\u8607", "330000": "\u6d59\u6c5f", "340000": "\u5b89\u5fbd", "350000": "\u798f\u5efa", "360000": "\u6c5f\u897f", "370000": "\u5c71\u6771", "410000": "\u6cb3\u5357", "420000": "\u6e56\u5317", "430000": "\u6e56\u5357", "440000": "\u5ee3\u6771", "450000": "\u5ee3\u897f", "460000": "\u6d77\u5357", "500000": "\u91cd\u6176", "510000": "\u56db\u5ddd", "520000": "\u8cb4\u5dde", "530000": "\u96f2\u5357", "540000": "\u897f\u85cf", "610000": "\u965d\u897f", "620000": "\u7518\u8085", "630000": "\u9752\u6d77", "640000": "\u5be7\u590f", "650000": "\u65b0\u7586", "710000": "\u53f0\u7063", "810000": "\u9999\u6e2f", "820000": "\u6fb3\u9580", "990000": "\u6d77\u5916" }; var postageContId = "J_PostageCont"; var postageToggleID = "J_PostageToggle"; var postageListID = "J_PostageList"; var postageTableContID = "J_PostageTableCont"; var destPanelID = "J_DestPanel"; var isUTF8 = (document.charset || document.characterSet).toLowerCase().indexOf("utf-8") != -1; var getDestNameByCode = (function () { if (isUTF8) { return function (destCode) { return DEST_MAP_UTF8[destCode] || "" } } else { return function (destCode) { return DEST_MAP[destCode] || "" } } })(); var itemSorter = function (i, i2) { if (i.mode == i2.mode) { return (i.dest == NATIONWIDE_CODE) ? 1 : -1 } else { return i.mode - i2.mode } }; return { _items: [], _itemMap: {}, _memo: "", _addItem: function (arr) { var item = { id: arr[0], mode: arr[1], dest: arr[2], fee: arr[3], addon: arr[4] }; this._items.push(item); if (!this._itemMap[item.mode]) { this._itemMap[item.mode] = [item] } else { this._itemMap[item.mode].push(item) } }, _getItemsByDestCode: function (destCode) { var items = []; for (mode in this._itemMap) { if (this._itemMap[mode].length === 1) { items.push(this._itemMap[mode][0]) } else { if (this._itemMap[mode].length > 1) { var matchItem, tmpItem; for (var i = 0, n = this._itemMap[mode].length; i < n; ++i) { tmpItem = this._itemMap[mode]; if (tmpItem.dest.indexOf(destCode) != -1) { matchItem = tmpItem; break } else { if (tmpItem.dest == NATIONWIDE_CODE) { matchItem = tmpItem } } } if (matchItem) { items.push(matchItem) } } } } return items }, _getDestNameByCode: function (destCodes) { if (!destCodes) { return "" } var destCodes = destCodes.split(","); var destNames = Array.map(destCodes, function (code) { return getDestNameByCode(code) }).join(","); return destNames }, _getFeesByDestCode: function (destCode) { var matchItems = this._getItemsByDestCode(destCode); var fees = {}; Array.forEach(matchItems, function (item) { Array.forEach(MODE_ARRAY, function (mode) { if (mode == item.mode) { fees[mode] = item.fee } }) }); if (fees[CORPFAST] && fees[POSTFAST]) { fees[FAST] = Math.min(fees[CORPFAST], fees[POSTFAST]) } else { fees[FAST] = fees[CORPFAST] } return fees }, _updatePostfeesByDest: function (destCode, destName) { YUD.get(postageToggleID).innerHTML = destName; var fees = this._getFeesByDestCode(destCode); var feesHtml = fees[ORDINARY] ? "\u5e73\u90ae: " + fees[ORDINARY] + "\u5143\u3000" : "";feesHtml += fees[FAST] ? "\u5feb\u9012: " + fees[FAST] + "\u5143\u3000" : "";feesHtml += fees[EMS] ? "EMS: " + fees[EMS] + "\u5143" : "";YUD.get(postageListID).innerHTML = feesHtml;YUE.onAvailable(postageTableContID, function () { this._updatePostfeesTableByDestCode(destCode) }, this, true) }, _updatePostfeesTableByDestCode: function (destCode) { var rowTemplate = '<tr><td>{modeName}</td><td>{fee}\u5143</td><td>{addon}\u5143</td><td class="cell-express-region">{destName}</td></tr>'; var matchItems, getDestName; var that = this; if (NATIONWIDE_CODE == destCode) { matchItems = Array.copy(this._items).sort(itemSorter); getDestName = function (destCode, item) { if (item.dest == NATIONWIDE_CODE) { return that._itemMap[item.mode].length > 1 ? "\u5176\u4ed6\u5730\u533a" : "\u5168\u56fd" } else { return that._getDestNameByCode(item.dest) } } } else { matchItems = this._getItemsByDestCode(destCode).sort(itemSorter); getDestName = function (destCode) { return that._getDestNameByCode(destCode) } } var rowHtmlArr = Array.map(matchItems, function (item) { item = YL.merge(item, { modeName: MODENAME_MAP[item.mode], fee: Number(item.fee).toFixed(1), destName: getDestName(destCode, item) }); return YL.substitute(rowTemplate, item) }); var tmpNode = document.createElement("div"); tmpNode.innerHTML = '<table border="0" cellspacing="1" cellpadding="0"><colgroup><col class="col-express-trans"/><col class="col-express-agency"/><col class="col-express-agency"/><col class="col-express-region"/></colgroup><thead><tr><th>\u8fd0\u9001\u65b9\u5f0f</th><th>\u9996\u4ef6\u8fd0\u8d39</th><th>\u52a0\u4ef6\u8fd0\u8d39</th><th class="cell-express-region">\u8fd0\u9001\u5230</th></tr></thead><tbody>' + rowHtmlArr.join("") + "</tbody></table>"; var table = YUD.get(postageTableContID).getElementsByTagName("table")[0]; if (table) { table.parentNode.replaceChild(tmpNode.firstChild, table) } else { YUD.get(postageTableContID).appendChild(tmpNode.firstChild) } }, _initDestPanel: function () { var panelEl = document.createElement("div"); panelEl.id = destPanelID; panelEl.className = "lst-express-region shadow"; var destMap = isUTF8 ? DEST_MAP_UTF8 : DEST_MAP; var destUlEl = document.createElement("ul"), liEl; for (var code in destMap) { var destName = (code == NATIONWIDE_CODE) ? "<strong>\u5168\u90e8</strong>" : destMap Код (Text): ;destUlEl.appendChild(document.createElement("li")).innerHTML = '<a href="#' + (code == NATIONWIDE_CODE ? postageTableContID : "") + '" data-code="' + code + '">' + destName + "</a>" } panelEl.appendChild(destUlEl);YUD.insertBefore(panelEl, document.body.firstChild);YUE.on(destUlEl, "click", function (ev) { YUE.stopEvent(ev); var target = YUE.getTarget(ev); while (target.tagName.toLowerCase() != "a" && target.tagName.toLowerCase() != "li") { target = target.parentNode } if ("a" != target.tagName.toLowerCase()) { return } var code = target.getAttribute("data-code"); if (code) { var destName = (code == NATIONWIDE_CODE) ? destMap[code] : target.innerHTML;this._updatePostfeesByDest(code, destName) } YUD.get(destPanelID).style.display = "none"; if (code == NATIONWIDE_CODE && YUD.get(postageTableContID)) { YUD.get(postageTableContID).parentNode.scrollIntoView(true) } }, this, true); return panelEl }, init: function () { var cfg = TB.Detail.Setup.getConfig(); if ("undefined" === typeof cfg) { return false } var config = cfg.valPostFee; if (!config || !config.currDest) { return false } if (YL.isArray(config.items)) { Array.forEach(config.items, function (item) { this._addItem(item) }, this) } var destName = this._getDestNameByCode(config.currDest); var contHtml = '<span>\u81f3<a href="#" class="postage-toggle" id="' + postageToggleID + '"></a>\uff1a</span>'; contHtml += '<em id="' + postageListID + '"></em>'; YUD.get(postageContId).innerHTML = contHtml; this._updatePostfeesByDest(config.currDest, destName); var toggle = YUD.get(postageToggleID); var panel = this._initDestPanel(); TB.widget.SimplePopup.decorate(toggle, panel, { width: panel.scrollWidth, height: panel.scrollHeight, offset: [-36, 16], position: "right", disableClick: true }); YUE.onAvailable(postageTableContID, function () { var tableContEl = YUD.get(postageTableContID); var toggle2Cont = document.createElement("ins"); toggle2Cont.innerHTML = '<a href="#" class="postage-toggle">\u9009\u62e9\u5730\u533a</a>'; tableContEl.appendChild(toggle2Cont); TB.widget.SimplePopup.decorate(toggle2Cont.getElementsByTagName("a")[0], panel, { width: panel.scrollWidth, height: panel.scrollHeight, offset: [-60, 16], position: "right", disableClick: true }); if (config.memo) { var memoEl = document.createElement("p"); memoEl.innerHTML = "\u8fd0\u8d39\u8bf4\u660e\uff1a" + config.memo; YUD.addClass(memoEl, "postage-memo"); tableContEl.appendChild(memoEl) } }) } } }();[/js]